一日一题
来自: 无灬言
2013-06-13 10:28:44
刚进C组(没有进过B组╮(╯﹏╰)╭....)露珠听说学语言要做多题~~~因此找了些题目,一天一题。露珠初学C,是个新手,因此题目神马的也都是基础的。看不上的勿扰,有愿意的欢迎和露珠一起做,欢迎大家一起讨论~~~
-
无灬言 楼主 2013-06-13 10:58:07
#include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k);
while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } } for(i=2;i<=k;i++) //每操作一次第i*j个开关,a[i*j]加1 { for(j=1;i*j<=n;j++) { a[i*j]=a[i*j]+1; } }
for(i=1;i<=n;i++) //若操作次数为偶数,表示该位置的灯亮着 { if(a[i]%2==0 && a[i]!=0) printf("%d\t",i); }
printf("\n"); return 0;
}
-
无灬言 楼主 2013-06-14 09:51:31
#include <stdio.h> int main() { int n,i,j,temp,sum; int a[20]; int factorial(int x); printf("你想输入几组数据?\n"); scanf("%d",&n); printf("请输入具体数值(1~20):\n");
for(i=0;i<n;i++) //输入数值 { scanf("%d",&a[i]); while(1) //检验是否超出数值范围 { if(a[i]>0 && a[i]<=20) break; else { printf("超出范围,请重新输入\n"); scanf("%d",&a[i]); } } } for(i=0;i<n;i++) //求阶乘之和 { sum = 0; for(j=1;j<=a[i];j++) { temp=factorial(j); sum=sum+temp; } printf("%d\n",sum); } return 0;
}
int factorial(int x) //求某一个整数X的阶乘 { int i,temp; for(i=1,temp=1;i<=x;i+=2) { temp=temp*i; }
return (temp);
}
-
Woodrow 2013-06-14 15:53:00
#include <stdio.h> int main() { int n,i,j,temp,sum; int a[20]; int factorial #include <stdio.h> int main() { int n,i,j,temp,sum; int a[20]; int factorial(int x); printf("你想输入几组数据?\n"); scanf("%d",&n); printf("请输入具体数值(1~20):\n"); for(i=0;i<n;i++) //输入数值 { scanf("%d",&a[i]); while(1) //检验是否超出数值范围 { if(a[i]>0 && a[i]<=20) break; else { printf("超出范围,请重新输入\n"); scanf("%d",&a[i]); } } } for(i=0;i<n;i++) //求阶乘之和 { sum = 0; for(j=1;j<=a[i];j++) { temp=factorial(j); sum=sum+temp; } printf("%d\n",sum); } return 0; } int factorial(int x) //求某一个整数X的阶乘 { int i,temp; for(i=1,temp=1;i<=x;i+=2) { temp=temp*i; } return (temp); } ... 无灬言我写的: http://codepad.org/6tCJx4Rj
另, 换个地方贴代码吧~ 豆瓣实在是不适合贴代码.
-
薛非 2013-06-16 11:39:35
#include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; #include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k); while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } } for(i=2;i<=k;i++) //每操作一次第i*j个开关,a[i*j]加1 { for(j=1;i*j<=n;j++) { a[i*j]=a[i*j]+1; } } for(i=1;i<=n;i++) //若操作次数为偶数,表示该位置的灯亮着 { if(a[i]%2==0 && a[i]!=0) printf("%d\t",i); } printf("\n"); return 0; } ... 无灬言第一个错误 数组a没有初始化 而直接 “for(i=2;i<=k;i++) //每操作一次第ij个开关,a[ij]加1” 所以,缺乏“第1个人把所有灯打开”的步骤 另外a数组里是垃圾值 对数组元素的操作没有意义
-
薛非 2013-06-17 10:39:06
#include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; #include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k); while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } } for(i=2;i<=k;i++) //每操作一次第i*j个开关,a[i*j]加1 { for(j=1;i*j<=n;j++) { a[i*j]=a[i*j]+1; } } for(i=1;i<=n;i++) //若操作次数为偶数,表示该位置的灯亮着 { if(a[i]%2==0 && a[i]!=0) printf("%d\t",i); } printf("\n"); return 0; } ... 无灬言#include <math.h> 毫无意义 陋习
-
薛非 2013-06-17 10:47:04
#include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; #include <stdio.h> #include <math.h> int main() { int a[1001],n,k,i,j; printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k); while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } } for(i=2;i<=k;i++) //每操作一次第i*j个开关,a[i*j]加1 { for(j=1;i*j<=n;j++) { a[i*j]=a[i*j]+1; } } for(i=1;i<=n;i++) //若操作次数为偶数,表示该位置的灯亮着 { if(a[i]%2==0 && a[i]!=0) printf("%d\t",i); } printf("\n"); return 0; } ... 无灬言printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k);
while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } }
这段写得很丑 典型的谭浩强风格
printf("请分别输入灯和人的数量\n"); while(scanf("%d%d",&n,&k) ,( k <1 || n<k || n>1000) ) { printf("数值不符,请重新输入:\n"); }
-
无灬言 楼主 2013-06-17 11:09:45
printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k); printf("请分别输入灯和人的数量\n"); scanf("%d%d",&n,&k); while(1) //检验是否超出 { if(k>=1 && k<=1000 && n>=k && n<=1000) break; else { printf("数值不符,请重新输入:\n"); scanf("%d%d",&n,&k); } } 这段写得很丑 典型的谭浩强风格 printf("请分别输入灯和人的数量\n"); while(scanf("%d%d",&n,&k) ,( k <1 || n<k || n>1000) ) { printf("数值不符,请重新输入:\n"); } ... 薛非T T...请问我要怎么弄可以好看一些...
-
薛非 2013-06-17 12:44:41
#include <stdio.h>
#define MAXNUM 1000 #define ON 0 #define OFF 1
int main( void ) { int light[MAXNUM] = { ON } ; //把所有灯打开 int n , k ; int i ;
printf( "请分别输入灯和人的数量\n" ); while ( scanf("%d%d",&n,&k) ,( k <1 || n<k || n > MAXNUM ) ) printf("数值不符,请重新输入:\n");
for ( i = 2 - 1 ; i < k ; i ++ ) //第2个人按下所有编号为2 的倍数的开关…… { int j ; for ( j = i ; j < n ; j += i + 1) light[j] = ! light[j]; }
for ( i = 0 ; i < n ; i ++ ) if( light[i]==ON ) printf( "%d " , i + 1 );
putchar('\n');
return 0; }
-
- 2013-06-19 15:04:31
#include <stdio.h> int main() { int n,i,j,temp,sum; int a[20]; int factorial #include <stdio.h> int main() { int n,i,j,temp,sum; int a[20]; int factorial(int x); printf("你想输入几组数据?\n"); scanf("%d",&n); printf("请输入具体数值(1~20):\n"); for(i=0;i<n;i++) //输入数值 { scanf("%d",&a[i]); while(1) //检验是否超出数值范围 { if(a[i]>0 && a[i]<=20) break; else { printf("超出范围,请重新输入\n"); scanf("%d",&a[i]); } } } for(i=0;i<n;i++) //求阶乘之和 { sum = 0; for(j=1;j<=a[i];j++) { temp=factorial(j); sum=sum+temp; } printf("%d\n",sum); } return 0; } int factorial(int x) //求某一个整数X的阶乘 { int i,temp; for(i=1,temp=1;i<=x;i+=2) { temp=temp*i; } return (temp); } ... 无灬言为什么要输入几组数据啊
-
无灬言 楼主 2013-06-20 13:29:16
第七题:素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。
例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。
输入:第一行:N 要竞猜的整数个数 接下来有N行,每行有一个正整数X 输出:输出有N行,每行是对应X的最接近它的素数
样例:输入 4 22 5 18 8 输出 23 5 19 7
-
无灬言 楼主 2013-06-25 13:47:45
1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:formal parameter 1 different from declaration. 露珠自己是新手,所以就想最好什么waring都没有.. ps:可以不管waring 的话露珠以后就不管它了
2、关于c[26]: 是的..c[24]就可以了。
3、关于c定义为char数组: 这个c是用来存放出现最多的小写字母的,它只会用来存放26个字母中的一个,字母的个数是存放在maxchar函数的 int a[26]里面的,所以露珠觉得木有问题。 当1000个a出现时,c里面存放的是a,a[0]里面存放的是1000。
谢谢指点~
-
薛非 2013-06-25 15:31:08
1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:forma 1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:formal parameter 1 different from declaration. 露珠自己是新手,所以就想最好什么waring都没有.. ps:可以不管waring 的话露珠以后就不管它了 2、关于c[26]: 是的..c[24]就可以了。 3、关于c定义为char数组: 这个c是用来存放出现最多的小写字母的,它只会用来存放26个字母中的一个,字母的个数是存放在maxchar函数的 int a[26]里面的,所以露珠觉得木有问题。 当1000个a出现时,c里面存放的是a,a[0]里面存放的是1000。 谢谢指点~ ... 无灬言“ 1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:formal parameter 1 different from declaration. 露珠自己是新手,所以就想最好什么waring都没有.. ps:可以不管waring 的话露珠以后就不管它了 ”
会有warning吗? 不应该啊 什么编译器
-
薛非 2013-06-25 15:36:11
1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:forma 1、关于int maxchar(char x[1010]); : 这个1010不写一可以运行,但是会多一个 waring.:formal parameter 1 different from declaration. 露珠自己是新手,所以就想最好什么waring都没有.. ps:可以不管waring 的话露珠以后就不管它了 2、关于c[26]: 是的..c[24]就可以了。 3、关于c定义为char数组: 这个c是用来存放出现最多的小写字母的,它只会用来存放26个字母中的一个,字母的个数是存放在maxchar函数的 int a[26]里面的,所以露珠觉得木有问题。 当1000个a出现时,c里面存放的是a,a[0]里面存放的是1000。 谢谢指点~ ... 无灬言“3、关于c定义为char数组: 这个c是用来存放出现最多的小写字母的,它只会用来存放26个字母中的一个,字母的个数是存放在maxchar函数的 int a[26]里面的,所以露珠觉得木有问题。 当1000个a出现时,c里面存放的是a,a[0]里面存放的是1000。 ”
这个我前面理解的有误 抱歉
-
薛非 2013-06-25 15:47:27
i<strlen(x) 写成 x[i]!='\0' 为好
temp=x[i]-97; a[temp]+=1; 等价于 a[ x[i] - 'a' ] ++ ; 后者显然更简洁
for(i=1,max = a[0],j=0;i<26;i++) { if(max<a[i]) { j=i; max = a[i]; } }
有些啰嗦了
for(i=1,j=0;i<26;i++) { if( a[j] < a[i] ) { j = i ; } }
-
Woodrow 2013-06-25 21:10:07
第七题:素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Ko 第七题:素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。 例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。 输入:第一行:N 要竞猜的整数个数 接下来有N行,每行有一个正整数X 输出:输出有N行,每行是对应X的最接近它的素数 样例:输入 4 22 5 18 8 输出 23 5 19 7 ... 无灬言 -
无灬言 楼主 2013-06-27 00:30:57
i<strlen(x) 写成 x[i]!='\0' 为好 temp=x[i]-97; a[temp]+=1; 等价于 a[ x[i] - 'a i<strlen(x) 写成 x[i]!='\0' 为好 temp=x[i]-97; a[temp]+=1; 等价于 a[ x[i] - 'a' ] ++ ; 后者显然更简洁 for(i=1,max = a[0],j=0;i<26;i++) { if(max<a[i]) { j=i; max = a[i]; } } 有些啰嗦了 for(i=1,j=0;i<26;i++) { if( a[j] < a[i] ) { j = i ; } } ... 薛非露珠用的是vc++6.0...
非常感谢~~~~ 指出两点麻烦指出~~~
-
薛非 2013-06-28 12:40:28
客气了 交流而已 谈不上指教 C语言确实有 ^= 运算 问题在于C语言要求 Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression 参见 http://www.cnblogs.com/pmer/archive/2013/01/02/2842516.html#2695949
-
Woodrow 2013-06-29 00:44:08
给新手程序员和学生的书籍推荐: http://www.cnblogs.com/badly1984/p/3161704.html
-
无灬言 楼主 2013-06-30 02:30:57
http://codepad.org/ZAaSBDKV 这里求教一个问题.. 为什么我写成 while(scanf("%d",&n)!=0)..这样就出错了..
你的回复
回复请先 登录 , 或 注册相关内容推荐
最新讨论 ( 更多 )
- 缺人吗 (浸圩)
- 买了一本美国的《C程序设计语言》 (月光倾城)
- 招聘兼职程序员 (可乐鸡翅)
- 搞了大半天就写了60多行代码 (豆瓣酱)
- 为什么一直提示scanf有问题 (君故)