1、题目:通过编程实现,统计1~n有多少个9 (提示:n通过参数传入int)
#include<stdio.h> int main() { int n, m; int i, j; int count=0; printf("输入一个n值:\n"); scanf("%d", &n); for(i = 1; i <= n; i++) { m = i; //把循环中i的值给到while中 while(m) { j = m % 10; //用m%10 余数来判定,若余数为9,择肯定数字中含9 if(j == 9) { count++; //每次判断成功 count++表示加1 } m = m / 10; //当个位比较玩,就可以比较百位,依次类推。 } } printf("共有%d个9\n", count); return 0; }
2、题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位。(提示:用数组完成)
#include<stdio.h> int main() { int a[1000] = {0}; int i, j = 0; int k=0; int n; printf("输入n的值:\n"); scanf("%d", &n); for( i = 0; i < n; i++) { a[i] = 1; //值1代表存在,值0代表不存在 } for(i = 1; i < 4; i = i % 3 + 1) { if (i == 3 && a[j] !=0) { a[j] = 0; printf("%d号玩家出局\n", j+1); //数组中序号为3倍数的人首先淘汰。 k++; if(n - 1 == k) { break; } j = (j + 1) % n; continue; } if ( a[j] == 0) { j = (j + 1) % n; i--; continue; } j = (j + 1) % n; } for (i = 0; i < n;i++) { if(a[i] == 1) { printf("%d号玩家留到最后\n", i+1); } } return 0; }
3、题目:一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3。请编程找出1000以内的完数。
#include<stdio.h> int main() { int a; printf("输入1000以内的数:\n"); scanf("%d", &a); int i, j, sum=0; for(i = 1; i <= a; i++) { for(j = 1; j < i; j++) //j<i 所以若i%j==0;表示j是i的约数 { if(i % j == 0) { sum = sum + j; //sum起累加作用,将约数值加起来。 } } if( sum == i) //判断sum与i值是否相同,若相同就输出。 { printf("%d ",i); } sum = 0; } printf("\n"); return 0; }
今日编程遇到的注意点:
1、两行scanf()中间有时要用getchar(); //滤掉回车符
2、strlen ( )函数求字符串长度,如果字符串是用户输入的,则不能提前声明,要放在输入之后求取。