科大讯飞杯题目

    xiaoxiao2021-12-14  18

    蛇形矩阵

    代码:

    #include <stdio.h> main() { int a[10][10],n,m,i,j,k,c=1; scanf("%d%d",&n,&m); for (i=0;i<n;i++) for (j=0;j<m;j++) { if (i%2==0) { a[i][j]=c++; } else { k=m-1; for (k;k>=0;k--) a[i][k]=c++; break; } } for (i=0;i<n;i++) { for (j=0;j<m;j++) printf("%d ",a[i][j]); printf("\n"); } }1000以内的素数且每位数之和为10,比如235

    代码:

    #include <stdio.h> main() { int i,j,s=0,n,a; for (i=2;i<=1000;i++) { n=i; s=0; while (n*10) { a=n; if (a==2||a==5||a==7||a==3) { s+=a; n=n/10; } else break; } if (i+i/10+i/100==10&&s==10) printf("%d\n",i); } }

    No9 数据序列(15分)

    问题描述:

    一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:15=1+2+3+4+5  15=4+5+6   15=7+8  请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。

    输入描述:一个整数

    输入描述:打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始,从小到大顺序打印。如果结果有多个序列,按每个序列的最小正整数的大小从小到大打印各序列。且序列不允许重复,序列内的整数用一个空格分割。如果没有符合要求的序列,输出“NONE”.

    样例输入:

    15

    样例输出:

    1  2  3  4  5

    4  5  6

    7  8

    样例输入:

    16

    样例输出:

    NONE

    思路:让i从1到n自增,作为大循环,让j从i开始自增作为内循环每个j相加若等于n则找到相等的输出每项的值,退出内循环,让i++继续让j等于i

              

    代码:

    #include <stdio.h> main() { int a,b,c=0,n,i,j,k,s=0; scanf("%d",&n); for (i=1;i<n;i++) { j=i;s=0; while (j)//j从i开始 { s=s+j; if (s>n)//大于9退出到大循环让i+1 { break; } if (s==n) //即找到相等的,输出每个数 { c=1; for (k=i;k<=j;k++) printf("%d ",k); printf("\n"); break; //找到相等就退出,让i从下一个数开始 } j++; } } if (c==0) //c为标记,若都没找到相等的则c的值就是初始定义的0,没变 printf("NONE\n"); }

    No5 字符串压缩(10分)

    问题描述:

    小明在一次机密场合中无意中看到自己所需要的信息,但他只能在一张标签的空白处几下这些信息,位置不够,于是他想了一种办法:对连续重复的部分用数字表示,没有连续重复的字符就不变。如AABBBCC,表示为A2B3C2.

    输入描述:输入的每行是一个有字母构成的字符串,遇到“exit”结束。

    输出描述:输出是压缩后的字符串。

    样例输入:

    ABBBCC

    DDFFFF

    exit 

    样例输出:

    AB3C2

    D2F4

    思路:

             下面的代码只是对一组输入字符进行处理,对输入exit结束我还没搞会,本题输入相同字符个数大于9就会出错,因为用ascll码数字表示字符的,大于字符9就会显示其他的字符,我的思路是固定一个数组元素和后面的元素比较,若等则固定元素后一位增加,后1位以后与固定的相同的就赋'0',最后输出不为字符0的所有元素

    代码:

    #include <stdio.h> #include <string.h> main() { char a[100],k='1'; int i,j,n; gets(a); n=strlen(a); for (i=0;i<n;i=j) { j=i+1; k='1'; while (1) { if (a[i]!=a[j]) //不等就退出 break; if (a[i]==a[j])  //相等则,固定的a[i]后一位用来存个数 { a[i+1]=++k; if (&a[j]-&a[i]>1)  //差值等于1则是固定a[i]的第一位,用来计数的,不能赋0,只有再                //后面相同的元素才能赋‘0’ a[j]='0'; } j++;   //内循环没有退出,继续向后执行 } } for (i=0;a[i];i++) if (a[i]!='0') printf("%c",a[i]); printf("\n"); }

    转载请注明原文地址: https://ju.6miu.com/read-968900.html

    最新回复(0)