第二届“国信蓝点”软件设计大赛 - C语言模拟题(附程序题答案)

2026/1/13 9:41:57

比如,用户输入:356827027232780 程序输出:成功(12分) view plaincopy to clipboardprint?

?? #include ?? #include

?? #include ?? void main(){

?? char *p;

?? p=(char *)malloc(sizeof(char)*20); ?? gets(p); ?? ?? ?? ??

int strlength=strlen(p)-1; int len=strlength;

int sum_odd=0;//奇数和 int sum_even=0;//偶数和

?? int temp_even=0;//2倍偶数临时变量 ?? for (int i=len;i>=0;i=i-2) ?? {

?? sum_odd+=p[i]-'0'; ?? }

?? len=strlength;

?? for (int i=len-1;i>=0;i=i-2) ?? ?? ?? ??

{

temp_even=2*(p[i]-'0'); if (temp_even>9) {

?? temp_even=temp_even-9; ?? } ?? ?? ?? ??

sum_even+=temp_even; }

if((sum_even+sum_odd)==0) printf(\成功\\n\

?? else

?? printf(\失败\\n\ ?? ?? }

10、程序设计

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的 差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。 比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循 环圈占1行。其中5位数全都相

同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照: [82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。(20分) view plaincopy to clipboardprint?

?? #include

?? int reg[200]; ?? int number=0;

?? /* ?? 返回num组合的最大值-最小值 ?? */

?? int sub(int num){ ?? int a[5];

?? for(int i=0;i<5;i++){ ?? a[i]=num; ??? num/=10; ??? }

??? //max sort

??? for (int i=0;i<5;i++){ ??? int max=i; ??? for(int j=i;j<5;j++) ??? {

??? if(a[j]>a[max]) ??? max=j; ??? }

??? int temp=a[max]; ??? a[max]=a[i]; ??? a[i]=temp;

??? }

??? int maxnum=10000*a[0]+1000*a[1]+100*a[2]+10*a[3]+a[4]; ??? int minnum=10000*a[4]+1000*a[3]+100*a[2]+10*a[1]+a[0]; ??? return maxnum-minnum; ??? }

??? /* ??? 查找某个具体的x是否与前面已经产生的值相等, ??? 即查找 是否发现黑洞 ??? */

??? int seek(int* tempreg,int x,int i){ ??? int isfound=0;

??? for (int k=0;k

??? if (tempreg[k]==x) ??? {

??? isfound=1;//发现黑洞 ??? break;

??? } ??? }

??? tempreg[i]=x; ??? return isfound; ??? }

??? /* ??? 当发现黑洞循环圈后

??? 查找检查该黑洞循环圈是否重复 ??? */

??? void addreg(int * tempreg,int next_num,int i){ ??? int found=0;

??? for (int j=0;j

??? if (tempreg[i]==reg[j]) ??? {

??? found=1; ??? return; ??? } ??? } ??? int k;

??? for ( k=i-1;tempreg[k]!=tempreg[i];k--); ??? for (k;k

??? reg[number++]=tempreg[k]; ??? }

??? reg[number++]=-1; ??? }

??? /* ??? 打印输出 ??? */

??? void show(){ ??? int i=0;

??? printf(\

??? printf(\ ??? while (reg[i++]!=0) ??? {

??? if(reg[i]!=-1){

??? printf(\ ??? } ??? else{ ??? i++; ??? printf(\ ??? if (reg[i]!=0) ??? {

??? printf(\ ??? printf(\ ??? } ??? } ??? } ??? }

??? void main(){

??? int num=10000;

??? int next_num;//存储最大值与最小值的差 ??? int found;

??? while(num<100000){ ??? next_num=num; ??? int i=0;

??? int tempreg[100]={0}; ??? for (i=0;i<100;i++){

??? next_num=(sub(next_num));

??? found=seek(tempreg,next_num,i); ??? if (found) ??? break; ??? } ??? if (found)

??? {

??? addreg(tempreg,next_num,i); ??? }

??? num++; ??? }

??? show();


第二届“国信蓝点”软件设计大赛 - C语言模拟题(附程序题答案).doc 将本文的Word文档下载到电脑
搜索更多关于: 第二届“国信蓝点”软件设计大赛 - C语言模拟题(附程序题答 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219