有四个题目系统都提示错误,大神们看下
1.Description输入n(n<100)个整数,找出其中最小的数,将它与最前面的数交换后输出这些数。
Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
Output
对于每组输入数据,输出交换后的数列,每组输出占一行。
Sample Input
4 2 1 3 4
5 5 4 3 2 1
0
Sample Output
1 2 3 4
1 4 3 2 5
程序代码:#include <stdio.h>
int main()
{
int a[9999];
int min;
int n, i, swap;
while (scanf("%d", &n) != 0)
{
if (n == 0) break;
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
min = 0;
for (i = 0; i < n; i++)
if (a[0] > a[i]) min = i;
swap = a[min];
a[min] = a[0];
a[0] = swap;
for (i = 0; i < n; i++)
{
if (i == n - 1) printf("%d\n", a[i]);
else printf("%d ", a[i]);
}
}
}2.Description
对于给定的一个字符串,统计其中数字字符出现的次数。
Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
Sample Output
6
9
程序代码:#include <stdio.h>
int main()
{
int n, i, j;
int count;
char a[9999];
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
count = 0;
scanf("%s", a);
for(j=0;j!='0';j++)
if (a[j] >= '0'&&a[j] <= '9') count++;
printf("%d\n", count);
}
}3.Description
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 你的任务就编写一个程序,判断给定的两个数是否是亲和数
Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;
Output
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
Sample Input
2
220 284
100 200
Sample Output
YES
NO
程序代码:#include <stdio.h>
int main()
{
int n, m;
int i, j;
scanf("%d", &j);
for (i = 1; i <= j; i++)
{
scanf("%d%d", &n, &m);
if (q(m) == q(n)) printf("YES\n");
else printf("NO\n");
}
}
int q(int n)
{
int i, sum = 0;
for (i = 1; i < n; i++)
if (n%i == 0) sum = sum + i;
return sum;
}4.Description
如果一个整数其所有因子(包括1但不包括自己)之和等于它自身,那么这个整数就是一个完数。例如,6是完数,因为 6 = 1+2+3。
Input
第一行为一个整数t,表示测试数据的组数。 接下来有t行,每行一个整数n(6 <= n <= 10000)。
Output
对于每个整数n,输出n(包含)以内的完数,每个完数后面跟一个空格。每组测试数据的输出占一行。
Sample Input
2
6
10
Sample Output
6
6
程序代码:#include <stdio.h>
int a();
int main()
{
int i, n, m, j;
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
scanf("%d", &m);
for (j = 2; j <= m; j++)
if (a(j) == j) printf("%d ", j);
}
printf("\n");
}
int a(int n)
{
int i, sum = 0;
for (i = 1; i < n; i++)
if (n%i == 0) sum = sum + i;
return sum;
}上面的题目想不通自己错在哪里,请大神指教
123都是答案错误
4是超时了,系统计算了20秒,然而限制在1秒内算对
[此贴子已经被作者于2017-1-9 22:43编辑过]










~