教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

C语言竞赛题目大全(15)

来源:网络收集 时间:2026-08-30
导读: #include int number[210][5]; /*存放可逆素数及素数分解后的各位数字*/ int select[110]; /*可以放在矩阵第一行和最后一行的素数的下标*/ int array[4][5]; /*4X4的矩阵,每行0号元素存可逆素数对应的数组下标*/ i
#include int number[210][5]; /*存放可逆素数及素数分解后的各位数字*/ int select[110]; /*可以放在矩阵第一行和最后一行的素数的下标*/ int array[4][5]; /*4X4的矩阵,每行0号元素存可逆素数对应的数组下标*/ int count; /*可逆素数的数目*/ int selecount; /*可以放在矩阵第一行和最后一行的可逆素数的数目*/ int larray[2][200]; /*存放素数前二、三位数的临时数组所对应的数量计数器*/ int lcount[2]; int num(int number); int ok(int number); void process(int i); void copy_num(int i); int comp_num(int n); int find1(int i);

37

int find2(void); int find0(int num); void p_array(void); void main() { int i,k,flag,cc=0,i1,i4; printf(\ for(i=1001;i<9999;i+=2) /*求满足条件的可逆素数*/ { k=i/1000; if(k%2!=0&&k!=5&&num(i)) /*若可逆素数的第一位不是偶数或5*/ { number[count][0]=i; /*存入数组*/ process(count++); /*分解素数的各位数字*/ if(number[count-1][2]%2!=0&& /*若可逆素数满足放在矩阵第一行*/ number[count-1][3]%2!=0&& /*和最后一行的条件,记录可逆素数的*/ number[count-1][2]!=5&& /*下标,计数器加1*/ number[count-1][3]!=5) select[selecount++]=count-1; } } larray[0][lcount[0]++]=number[0][0]/100; /*临时数组的第一行存前二位*/ larray[1][lcount[1]++]=number[0][0]/10; /*临时数组的第二行存前三位*/ for(i=1;i

38

} } int num(int number) /*判断是否可逆素数*/ { int j; if(!ok(number)) return 0; for(j=0;number>0;number/=10) /*将素数变为反序数*/ j=j*10+number; if(!ok(j)) return 0; /*判断反序数是否为素数*/ return 1; } int ok(int number) /*判断是否为素数*/ { int i,j; if(number%2==0) return 0; j=sqrt((double)number)+1; for(i=3;i<=j;i+=2) if(number%i==0) return 0; return 1; } void process(int i) /*将第i个整数分解为数字并存入数组*/ { int j,num; num=number[0]; for(j=4;j>=1;j--,num/=10) number[j]=num; } void copy_num(int i) /*将array[0]指向的素数的各位数字复制到array中*/ { int j; for(j=1;j<=4;j++) array[j]=number[array[0>[j]; } int comp_num(int n) /*判断array中每列的前n位是否与可逆素数允许的前n位矛盾*/ { static int ii; /*用内部静态变量保存前一次查找到的元素下标*/ static int jj; /*ii:前一次查找前二位的下标,jj:前一次查找前三位的下标*/ int i,num,k,*p; /*p:指向对应的要使用的前一次下标ii或jj*/ int *pcount; /*pcount:指向要使用的临时数组数量的计数器*/ switch(n){ /*根据n的值选择对应的一组控制变量*/ case 2:pcount=&lcount[0];p=ⅈbreak; case 3:pcount=&lcount[1];p=&jj;break; default:return 0; } for(i=1;i<=4;i++) /*对四列分别进行处理*/ { for(num=0,k=0;k=0&&numlarray[n-2][*p];(*p)++); /*否则向后找*/

39

if(*p<0||*p>=*pcount) { *p=0; return 0; } if(num!=larray[n-2][*p]) return 0; /*前n位不是可逆素数允许的值则返回0*/ } return 1; } int find1(int i) /*判断列方向是否是可逆素数*/ { int num,j; for(num=0,j=0;j<4;j++) num=num*10+array[j]; return find0(num); } int find2(void) /*判断对角线方向是否是可逆素数*/ { int num1,num2,i,j; for(num1=0,j=0;j<4;j++) num1=num1*10+array[j][j+1]; for(num2=0,j=0,i=4;j<4;j++,i--) num2=num2*10+array[j]; if(find0(num1)) return(find0(num2)); else return 0; } int find0(int num) /*查找是否为满足要求的可逆素数*/ { static int j; if(num<=number[j][0])for(;j>=0&&numnumber[j][0];j++); if(j<0||j>=count){ j=0;return 0; } if(num==number[j][0]) return 1; else return 0; } void p_array(void) /*输出矩阵*/ { int i,j; for(i=0;i<4;i++) { for(j=1;j<=4;j++) printf(\ printf(\ } } --------------------------------------------------------------------------------

C语言竞赛题目大全(15).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/518712.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)