C语言经典编程题_第1页
C语言经典编程题_第2页
C语言经典编程题_第3页
C语言经典编程题_第4页
C语言经典编程题_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选文库 “蓝桥杯”软件大赛练习题 求素数 最大公约数 和最小公倍数 连续自然数 分数比较 猜数字游戏 抓交通肇事犯 古堡算式 约瑟夫问题 捕鱼问题 出售金鱼 亲密数 完全数 加密 巧夺偶数 数字移动 1、求101200之间一共有多少个素数 #include #include int su(int m) int i,n=1; for(i=2;i=sqrt(m);i+) if (m%i=0) n=0; break; return n; main() int i,num=0; for(i=101;i=200;i+) if(su(i) num+; printf(101200之间素数个数是%d,num); 2、求最大公约数和最小公倍数 #include int zdgxs(int x,int y) int t; if(xy) t=x;x=y;y=t; t=x%y; while(t) x=y; y=t; t=x%y; return y; int zxgbs(int x,int y) return (x*y/zdgxs(x,y); main() int a,b,gxs,gbs; printf(please input two numbers:); scanf(%d%d, gxs=zdgxs(a,b); gbs=zxgbs(a,b); printf(%d和%d的最大公约数是%dn,a,b, gxs); printf(%d和%d的最小公倍数是%dn,a,b, gbs); 3、请找出十个最小的连续自然数,它们个个都是合数(非素数) #include #include int su(long m) int i,n=1; for(i=2;i=10) break; for(i=0;i%d/%dn,a,b,c,d); else if(a1c1) printf(%d/%d%d/%dn,a,b,c,d); else printf(%d/%d=%d/%dn,a,b,c,d); 5、猜数字游戏 #include main() int num1,num2; srand(time(NULL); num1=rand()%100; printf(请输入一个0到100之间的整数:); scanf(%d, while(1) scanf(%d, if(num1=num2) printf(你真棒,猜对了!); break; else if(num1num2) printf(猜大了,重猜!); else printf(太小了,重猜!); 6、抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。 *问题分析与算法设计 按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。 #include #include main() int num,i,j,k; for(i=1;i=9;i+) for(j=0;j=9;j+) if(i!=j) num=i*1000+i*100+j*10+j; for(k=1;k*kdata1=1; head-data2=1; p=head; for(i=2;idata1=i; q-data2=i; p-next=q; p=q; p-next=NULL; return(head); struct node * delete_node(struct node *head,struct node *p) struct node *q; if(p=head) head=p-next; p-next=NULL; else q=head; while(q-next!=p) q=q-next; q-next=p-next; free(p); return (head); main() struct node *head,*p,*q; int num,i; printf(请输入人数:); scanf(%d, head=create_list(num); while(num1) p=head; while(p) if(p-data1)%2) q=p; p=p-next; head=delete_node(head,q); num-; else p=p-next; p=head; i=1; while(p) p-data1=i; i+; p=p-next; printf(最后剩下的人原来的位置是%dn,head-data2); 8、古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:ABCDE应该代表不同的数字,问号也代表某个数字!华生:“我猜也是!于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把ABCDE 所代表的数字写出来。 #include int func(long n,int m) int num5,i=0,j; long n1=n; while(n1) numi+=n1%10; n1=n1/10; for(i=0;i4;i+) for(j=i+1;j5;j+) if (numi=numj) return 0; n1=n*m; i=4; while(n1) if(n1%10!=numi-) return 0; n1=n1/10; return 1; main() long i; int j; for(i=10000;i100000;i+) for(j=2;jdata1=1; /head-data2=1; p=head; for(i=2;idata1=i; /q-data2=i; p-next=q; p=q; p-next=head; return(head); struct node * delete_node(struct node *head,struct node *p) struct node *q; if(p=head) head=p-next; p-next=NULL; else q=head; while(q-next!=p) q=q-next; q-next=p-next; free(p); return (head); void print_list(struct node *head) struct node *p; printf(%5d,head-data1); p=head-next; while(p!=head) printf(%5d,p-data1); p=p-next; main() struct node *head,*p,*q; int num=M+N,n; head=create_list(M+N); p=head; while(numN) n=1; while(nnext; n+; q=p; p=p-next; head=delete_node(head,q); num-; print_list(head); 10、捕鱼问题 A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼? #include main() int i;long num=1; for(i=1;i=5;i+) num=(num*5)+1; printf(num=%dn,num); 11、出售金鱼 买卖提将养的一缸金鱼分五次出售系统上一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问原来的鱼缸中共有几条金鱼? *问题分析与算法设计 题目中所有的鱼是分五次出售的,每次卖出的策略相同;第j次卖剩下的(j+1)分之一再加1/(j+1)条。第五次将第四次余下的11条全卖了。 假定第j次鱼的总数为X,则第j次留下: x-(x+1)/(j+1) 当第四次出售完毕时,应该剩下11条。若X满足上述要求,则X就是题目的解。 应当注意的是:(x+1)/(j+1)应满足整除条件。试探X的初值可以从23开始,试探的步长为2,因为X的值一定为奇数。 *程序说明与注释 #include int main() int i,j,n=0,x; /*n为标志变量*/ for(i=23;n=0;i+=2) /*控制试探的步长和过程*/ for(j=1,x=i;j=11;j+) /*完成出售四次的操作*/ if(x+1)%(j+1)=0) /*若满足整除条件则进行实际的出售操作*/ x-=(x+1)/(j+1); else x=0;break; /*否则停止计算过程*/ if(j=5 /*输出结果*/ n=1; /*控制退出试探过程*/ 12、亲密数 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 *问题分析与算法设计 按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。计算数a的各因子的算法: 用a依次对i(i=1a/2)进行模运算,若模运算结果等于0,则i为a的一个因子;否则i就不是a的因子。 *程序说明与注释 #include int main() int a,i,b,n; printf(There are following friendlynumbers pair smaller than 3000:n); for(a=1;a3000;a+) /*穷举1000以内的全部整数*/ for(b=0,i=1;i=a/2;i+) /*计算数a的各因子,各因子之和存放于b*/ if(!(a%i)b+=i; /*计算b的各因子,各因子之和存于n*/ for(n=0,i=1;i=b/2;i+) if(!(b%i)n+=i; if(n=a /*若n=a,则a和b是一对亲密数,输出*/ 13.完全数 如果一个数恰好等于它的因子之和,则称该数为“完全数”。 *问题分析与算法设计 根据完全数的定义,先计算所选取的整数a(a的取值11000)的因子,将各因子累加于m,若m等于a,则可确认a为完全数。 *程序说明与注释 #include int main() int a,i,m; printf(There are following perfect numbers smaller than 1000:n); for(a=1;a1000;a+) /*循环控制选取11000中的各数进行判断*/ for(m=0,i=1;i=a/2;i+) /*计算a的因子,并将各因子之和m=a,则a是完全数输出*/ if(!(a%i)m+=i; if(m=a) printf(%4d ,a); printf(n); 14、加密 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后除以10,用余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 编程实现输入一个电话号码,得到加密后的数字。 1.程序分析: 2.程序源代码: #include main() int a,i,aa4,t; scanf(%d, aa0=a%10; aa1=a%100/10; aa2=a%1000/100; aa3=a/1000; for(i=0;i i) s = s + i; a = a - i; else s = s + a; a = 0; while(1) printf(请输入你这次要取的粒数:); scanf(%d, if(i=1) break; else printf(输入不正确,请重新输入13之间的数:n); if( a i) w = w + i; a = a - i; else w = w + a; a = 0; printf(你一共取的粒数是:%d,机器一共取的粒数是:%d,w,s); if( w%2=0 ) printf(所以你赢了n); else printf(所以你输了n); 16数字移动 在图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小到大排列.移动的规律是:只能将数字沿线移向空白的点.请编程显示数字移动过程。 #include int a8=0,1,2,5,8,7,6,3; int b9; int c8; int count=0; void show_screen() int i; printf(第%2d次移动n,count+); for(i=0;i9;i+) if(i%3=2) printf(%2dn,bi); else printf(%2d,bi); int main() int i,j,k,t; void show_screen(); printf(请输入8个18之间的数字:n); for(i=0;i8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论