有四个题目系统都提示错误,大神们看下
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编辑过]