蛇形矩阵
代码:
#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"); }
