科大讯飞杯题目
来源:互联网 发布:我国网络直播行业现状 编辑:程序博客网 时间:2024/05/21 22:49
蛇形矩阵
代码:
#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%10;if (a==2||a==5||a==7||a==3){s+=a;n=n/10;}elsebreak;}if (i%10+i/10%10+i/100%10==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");}