c语言程序设计题库

更新时间:2024-03-21 12:39:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二题

#include void main() {

char ch[20]; int i; gets(ch);

for(i=0;i<20;i++) {

if(ch[i]>='a'&&ch[i]<='z') ch[i]=ch[i]-32;

else if(ch[i]>='A'&&ch[i]<='Z') ch[i]=ch[i]+32; }

puts(ch); }

第三题

#include void main() {

int n,i,max=0; int a[20];

scanf(\ for(i=0;i

scanf(\ for(i=0;i

if(max

printf(\}

第四题

#include double f(int); void main() {

int n;

scanf(\ printf(\}

double f(int n) {

int i;

double result=0.0; for(i=1;i<=n;i++)

result=result+(double)1/i; return result; }

5题目标题: 汽水瓶(谌海军) 题目描述:

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。

小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,

方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。

然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。

如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入描述:

输入为一个正整数n(1<=n<=100),表示空汽水瓶个数。 #include void main()

{int n,m=0,sum=0,i=0; scanf(\while(n>=3) {m=n/3; n=n-2*m; sum=sum+m; }

if(n=2) sum++; else if(n<2) sum=sum+i;

printf(\}

6题目标题: 栽树(彭玉旭) 题目描述:

在某食堂门前有n(n<200)个树坑,编号是从0~n-1,开始时是没有树的。每个月,园林工人都会在编号a~b(0<=a<=b<=n-1)之间栽树(包括a,b),如果树坑原来有树,则不需要从新栽树。请计算4个月后,食堂门前总共有多少棵树。 输入描述:

第一个整数是n ,接下来有 8个整数,分别为每个月栽树的编号。 输出描述描述: 食堂门前树的总数。

第六题

#include void main() {

int n;

int a1,b1,a2,b2,a3,b3,a4,b4; int result=0; int i;

scanf(\

scanf(\ scanf(\ scanf(\ scanf(\ for(i=0;i

if(i>=a1&&i<=b1) result++;

else if(i>=a2&&i<=b2) result++;

else if(i>=a3&&i<=b3) result++;

else if(i>=a4&&i<=b4) result++; }

printf(\}

7题目标题: 密码破译(闫博钊) 题目描述:

某组织欲破获一个外星人的密码,密码由一定长度的字串组成。此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。现在就请你编程找出能破译此密码的两个钥匙。 输入描述:

输入第一行为钥匙的个数N(1≤N≤5000) 输入第二行为密码的长度 以下N行为每个钥匙的长度 输出描述描述:

若无法找到破译此密码的钥匙,则输出仅1行0 。若找到两把破译的钥匙,则输出有两行,分别为两把钥匙的编号。若有多种破译方案,则只输出一种即可。 #include void main() { int n,s[5000],l,i,j,sign=1,m=0;

scanf(\ scanf(\ for(i=0;i

#include void main()

{int m,n,sum,i,j,a[5000]; scanf(\scanf(\for(i=1;i<=n;i++) scanf(\for(i=1;i

printf(\ } }

#include void main() { int N,length; int i,j,key[5000]; int num1,num2,t; scanf(\ scanf(\ for(i=0;i

}

{ num1=i+1; num2=j+1; t=0; break; } }

if(t==1) printf(\ else

printf(\

9题目标题: 基因编码(闫博钊) 题目描述:

小可可选修了基础生物基因学。教授告诉大家Super Samuel星球上Kitty猫的基因的长度都是2的正整数次幂 2k (k ≤ 8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成 0 和 1,于是Kitty猫的基因可以写成一个 01 串表达式 S 。为了便于分析和降低数据存储量,教授发明了 ABC 编码规则。该编码规则是不断地按照 A (若S串全是0) T(S)= B (若S串全是1)

CT(S1)T(S2) (否则把S串分成两个等长的子串S1和S2) 对Kitty猫基因01串表达式S进行改写,直至最终被改写成只含有字符“A”、“B”、“C”的符号串。

例如 T(01001011)

= CT(0100)T(1011)

= CCT(01)T(00)CT(10)T(11) = CCCT(0)T(1)ACCT(1)T(0)B = CCCABACCBAB

请你编写程序帮助小可可求出Kitty猫基因的ABC编码以协助教授开展科研工作。 输入描述:

测试数据以一行的形式存放Kitty猫基因的01串表达式, 字符串长度不超过500 输出描述描述:

对应测试数据,以一行的形式输出这个Kitty猫基因的ABC编码。 #include #include

void f(char a[],int begin,int end); int main() {

char a[500]; int length; gets(a);

提示:枚举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表, 可将改整形数存入枚举变量地址以实现外部赋值的目的。 如:enum day{Sun,Mon,Tue,Wed,Thu,Fri,Sat} d1; scanf(\

当键盘输入1时,相当于将d1赋值为Mon,即d1=Mon

枚举变量的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方式处理;

如:char *p[]={“Sun”,“Mon”,“Tue”,\ printf(\

其输出结果为:Tue 输入描述:

输入为两个正整数,第一个数n(n<=6)表示今天是星期几, 第二个数m(m<=1000),表示求m天后是星期几; 输出描述描述:

输出为一个长度为3的字符串,表示星期几的名称; #include void main() {

enum day{Sun,Mon,Tue,Wed,Thu,Fri,Sat} d;

char *p[]={\ int m;

scanf(\ printf(\ }

15题目标题:

abc+cba=1333(卜胜贤) 题目描述:

已知abc+cba=1333,其中a,b,c均为一位数,编程求出所有满足条件的a,b,c所有组合。(知识点:控制语句) 输入描述: 无

输出描述描述:

输出数据为多组,每组两个整形数

#include

void main()

{

int a,b,c;

for(a=0;a<10;a++)

for(b=0;b<10;b++) for(c=0;c<10;c++) {

if((a*100+b*10+c)+(c*100+b*10+a)==1333)

printf(\ } }

16题目标题:

整数各位取奇数(卜胜贤) 题目描述:

将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。 高位仍在高位,低位仍在低位。

例如,当s中的数为:87653142时,t中的数为:7531。 (知识点:控制语句、函数、指针) 输入描述:

输入数据为一个不大于100000000的整形数; 输出描述描述:

输出数据为一个不大于100000000的整形数; #include void main() {

int a; int b;

int sum=0; int count=0; int base=1;

scanf(\ while(a!=0) {

b=a; a=a/10; if(1==b%2) {

sum=sum+base*b; base=base*10; count++; } }

printf(\}

17题目标题:

四位反序数(卜胜贤) 题目描述:

设N是一个四位数,它的n倍恰好是其反序数(例如:123的反序数是321), 编程,输出一个满足条件的N。(知识点:控制语句) 输入描述:

输入为一个整形数n(2<=n<=9) 输出描述描述:

输出为一个四位数的整形数 #include

int number(int n);

void main() {

int n,i,t=0;

scanf(\

for(i=1000;i<10000;i++) {

if(i*n==number(i)) {

t=i; break; } }

printf(\ }

int number(int n) {

int a1,a2,a3,a4; int result; a1=n; a2=n/10; a3=n/100; a4=n/1000;

result=a1*1000+a2*100+a3*10+a4; return result; }

18题目标题:

字母翻译(卜胜贤) 题目描述:

编程: 求解下列式中各字母代表的数字并输出

PEAR-ARA=PEA

(知识点:控制语句) 输入描述: 无

输出描述描述:

输出为四个数字,以空格分开,依次为代表P E A R 的数字 #include void main() {

int p,e,a,r,d,b,c; for(p=1;p<10;p++) for(e=0;e<10;e++) for(a=1;a<10;a++) for(r=0;r<10;r++) {

d=p*1000+e*100+a*10+r; b=a*100+r*10+a; c=p*100+e*10+a; if(d-b==c) printf(\ } }

19题目标题:

字符串复制(卜胜贤) 题目描述:

有一个字符串,包括n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串。

要求在主函数输入字符串及m值并输出复制结果。 (知识点:控制语句、字符串、指针) 输入描述:

输入为一个字符串(长度小于80)及一个整形数(小于字符串的实际长度) 输出描述描述: 输出为一个字符串 #include #include void main() { int n,m,i; char str[80]; char *p; p=str; gets(str); scanf(\

m=strlen(str); for(i=n-1;i

#include #include void main() {

int i,j,n; char a[80]; gets(a);

scanf(\

for(i=n-1;i

20题目标题:

二维字符数组转换(卜胜贤) 题目描述:

编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的 顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H H H H

则字符串中的内容应是: WSHWSHWSH。 (知识点:数组、指针) 输入描述:

输入为一个3行4列二维字符数组数据 输出描述描述:

输出为一个长度为12的字符数组; #include void main() { char a[3][4],s[12]; char (*p1)[4],*p2; int i; void fun(char (*p1)[4],char *p2); for(i=0;i<4;i++) { scanf(\ getchar(); } for(i=0;i<4;i++)

{ scanf(\ getchar(); } for(i=0;i<4;i++) { scanf(\ getchar(); } p1=a; p2=s;

fun(p1,p2); puts(s); }

void fun(char (*p1)[4],char *p2) { int i,j; for(i=0;i<4;i++) for(j=0;j<3;j++) { *p2=*(*(p1+j)+i); p2++;} *p2='\\0'; }

#include void main() {

char a[3][8],b[24]; int i,j,k=0,t=0; for(i=0;i<3;++i)

for(j=0;j<8;++j)

scanf(\

while(k<24) {

b[k]=a[k%3][t]; k++;

if(k%3==0) t++;

}

for(i=0;i<24;++i) {

if(b[i]!=' ')

printf(\ if(b[i]=='\\n') break; } }

21题目标题:

年龄分组(卜胜贤) 题目描述:

统计各年龄段的人数。N(N=20)个年龄通过键盘输入,并放在age数组中;

要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中, 把20至29岁年龄段的人数放在d[2]中, 其余依此类推,

把100岁 (含100)以上年龄的人数都放在d[10]中。依次输出d[0]至d[10]。 输入描述:

输入为20个正整数; 输出描述描述:

输出为11个正整数; #include #define N 20 void main() { int i,age[N],d[11]; for(i=0;i=0&&age[i]<=9) d[0]++; else if (age[i]>=10&&age[i]<=19) d[1]++; else if (age[i]>=20&&age[i]<=29) d[2]++; else if (age[i]>=30&&age[i]<=39) d[3]++; else if (age[i]>=40&&age[i]<=49) d[4]++; else if (age[i]>=50&&age[i]<=59) d[5]++; else if (age[i]>=60&&age[i]<=69) d[6]++; else if (age[i]>=70&&age[i]<=79) d[7]++; else if (age[i]>=80&&age[i]<=89) d[8]++; else if (age[i]>=90&&age[i]<=99) d[9]++; else if (age[i]>=100) d[10]++; } for(i=0;i<10;i++)

printf(\ printf(\}

#include

void main() {

int a[20],b[11]; int i,j;

for(i=0;i<20;++i)

scanf(\ for(i=0;i<11;++i) b[i]=0; for(i=0;i<20;++i) {

for(j=0;j<10;++j) {

if(a[i]>=(j*10)&&a[i]<=(j*10+9)) b[j]++; }

if(a[i]>=100) b[10]++; }

for(i=0;i<10;++i)

printf(\ printf(\}

22题目标题:

分数数列求和(谌海军) 题目描述:

有一个分数数列为: 2/1,3/2,4/3,5/4……

求出这个数列的前n(n<=20)项之和,保留小数点后4位。 输入描述:

输入一个整数n(n<=20); 输出描述描述:

输出为一个小数,保留小数点后4位; #include

void main() {

float s=2.0,t=1.0,result=0; int n,i;

scanf(\ for(i=0;i

result=result+s/t; s++; t++; }

printf(\}

23题目标题:

杨辉三角形(谌海军) 题目描述:

输出n行杨辉三角形,如下:

1 1 1 1 2 1 1 3 3 1

????

注意:输出时,每行最后一个数字后面无空格,否则无法通过机判; 输入描述:

输入为一个正整数n

输出为n行杨辉三角形; #include void main() {

int a[100][100]; int n; int i,j;

scanf(\ for(i=0;i

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i

for(j=0;j

printf(\ printf(\ printf(\ }

}

24题目描述 题目标题: 鞍点(谌海军) 题目描述:

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。 也可能没有鞍点。 输入描述:

输入一个3行3列的二维整形数组; 输出描述描述:

如果鞍点存在,输出其坐标;否则输出-1;如:鞍点位于第一行第三列,则输出1 3;

#include #define N 3

int GetRowIndex(int a[][N],int col) {

int row=0; int i;

int min=a[0][col]; for(i=1;i

min=a[i][col]; row=i; }

return row; }

void main() {

int a[N][N];

int i,j,row,col,max,rowResult,flag=0; for(i=0;i

row=i;col=0;max=a[i][0]; for(j=1;jmax)

{ col=j; max=a[i][j]; }

rowResult=GetRowIndex(a,col); if(row==rowResult) { flag=1; break; } }

if(flag==1) {

printf(\} else printf(\ }

25题目标题:

最长单词(谌海军) 题目描述:

输入一个字符串,将其中最长的单词输出(不含标点符号); 如果最长单词的数量有多个,输出第一个即可;

注:大写字母的ascii码从65~90,小写字母的ascii码从97~122; 输入描述:

输入为长度小于100的字符串; 输出描述描述:

输出为长度小于100的字符串;

26题目标题:

金额转换(谌海军) 题目描述:

将一个小写的金额数字转换为大写输出 提示:

1、注意数字的取值范围;

2、注意连续的多个零,如:60021应表示为六万零二十一,而不是六万零千零百二十一; 3、金额的各位大写采用简体中文:十百千万;

4、数字的大写采用简体中文:零一二三四五六七八九; 输入描述:

输入为一个5位数的正整数; 输出描述描述:

输出为大写的数字; #include int p(int t);

void main() {

char wei[5][10]={\十\百\千\万\

char num[10][10]={\一\二\三\四\五\六\七\八\九\ int i;

int n,count=0,s; scanf(\ s=n;

while(s>0) {

s=s/10; count++; }

for(i=count;i>0;i--) {

printf(\ printf(\ n=n%p(i-1); if(n

if(n==0) break;

printf(\零\ i--; }

while(n

int p(int t) {

int i,result=1; for(i=0;i

result=result*10; return result; }

27题目标题:

查找不同的木棍(彭玉旭) 题目描述:

小明的收集了一些木棍,并测量了每个木棍的长度,记录下来.假设小明有奇数根木棍,只有一

个木棍找不到跟它一样长的另外一根木棍.请编程找出这个没有相同长度的木棍,输出它的长度.

知识点: 排序;或者用异或操作 0 异或x=x;x异或x=0;a异或b异或c=a异或(b异或c)=(a异或b)异或c=a异或c异或b 输入描述:

输入包含一个奇数n(n<30000),然后是n个整数,表示每个木棍的长度,并保证只有一根木棍找不到跟他一样长的木棍. 输出描述描述:

输出符合条件的木棍的长度 #include #define N 30000 void main() {

int n,i,j,temp; int a[N];

scanf(\ for(i=0;i

scanf(\ for(i=0;i

if(a[i]

temp=a[i]; a[i]=a[j]; a[j]=temp; } }

for(i=0;i

if(i==n-1) {

printf(\ break; } else {

if(a[i]!=a[i+1]) {

printf(\ break; } else i++;

}

} }

28题目标题:

最长上升子序列数(闫博钊) 题目描述:

一个数的序列bi,当b1

你的任务,就是对于给定的序列,求出最长上升子序列的长度。 输入描述:

第一行输入序列的长度N(1<=N<=1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。 输出描述描述:

输出最长上升子序列的长度 #include void main() {

int n,i,j,max=0; int a[100],b[100]; scanf(\ for(i=0;i

scanf(\ for(i=0;i

for(i=n-1;i>=1;--i) {

for(j=i-1;j>=0;--j) {

if(a[j]

for(i=0;i

if(max

printf(\}

29题目标题:

求反顺序数(张然) 题目描述:

输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321 输入描述:

输入一个整数n, 输出描述描述: 输出一个反顺序的数 #include

int main() {

int n,i,a[20],k=0,t; scanf(\ while(n>0) {

t=n; a[k]=t; n=n/10; k++; }

for(i=0;i

printf(\}

31题目标题:

求三个整数的最大公约数(杨洁) 题目描述:

对任意三个整数,求它们的最大公约数 输入描述: 三个整数a,b,c 输出描述描述: a,b,c的最大公约数 #include int f(int a,int b); void main() {

int a,b,c,x;

scanf(\ x=f(f(a,b),c); printf(\}

int f(int a,int b) {

int max,min,temp; if(a>b) {

max=a; min=b; } else {

max=b; min=a; }

while(max%min!=0) {

temp=max; max=min;

min=temp%min; }

return min; }

#include void main() { int max(int a,int b); int a,b,c,t,max1,max2; scanf(\ if(a

int max(int a,int b) { int r; while(b!=0) { r=a%b; a=b; b=r; } return a;

}

32题目标题:

在字符串中查找字符(杨洁) 题目描述:

判断字符ch是否与str所指串中的某个字符相同;若相同,则什么都不做,若不同,则将其插在串的最后,字符只包含数字和字母。str可能为空,str最长为100. 输入描述:

包含4组测试数据,每组测试数据包含一个字符ch 一个字符串 str,每组数据占一行 输出描述描述:

对每组测试输出新的字符串 #include #include void main() {

char ch[4],str[4][100]; int i,j,k;

for(i=0;i<4;++i) {

scanf(\ gets(str[i]); }

for(i=0;i<4;++i) {

if(str[i]==\ {

printf(\ continue; }

for(j=0;j

if(ch[i]==str[i][j]) {

for(k=1;k

if(j==strlen(str[i])) {

for(k=1;k

printf(\ printf(\ } } }

33题目标题: 第几天(谌海军) 题目描述:

输入某年某月某日,判断这一天是这一年的第几天?

程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,

特殊情况,闰年且输入月份大于3时需考虑多加一天。 输入描述:

输入为三个整数,分别表示年、月、日; 输出描述描述:

输出为一个整数,表示输入的年月日为当年的第几天; #include

void main() {

int year[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,d; int total=0; int i;

scanf(\

if(y%4==0&&y0!=0||y@0==0) year[1]++; for(i=0;i

total=total+year[i]; }

total=total+d; printf(\}

34题目标题:

字符串移动(谌海军) 题目描述:

将一个字符串向左(向右)移动n位,移出的字符放置在串尾(串首),形成一个新的字符串;

输入描述:

输入为一个长度小于20的字符串,一个整数n(-100

输出为移动完成后的字符串;

#include #include #include void main() {

char str[20]; int n; int i; gets(str);

scanf(\ if(n>=0) {

n=n%strlen(str);

for(i=strlen(str)-n;i

else if(n<0) {

n=abs(n)%strlen(str); for(i=n;i

printf(\ } }

35题目标题: 发放奖金(杨鼎强) 题目描述:

某车间按工人加工零件的数量发放奖金,奖金分为五个等级:每月加工零件数N < 100者奖金为10元;100 < = N < 110者奖金为30元;110 < = N <120 者奖金为50元;120 < = N <130 者奖金为70元;N > 130者奖金为80元。请编程,由键盘输入加工零件数量,显示应发奖金数。 输入描述:

输入10个加工零件数量,数量小于400. 输出描述描述:

对每一个加工零件个数,输出应发奖金数,每个奖金数之间用空格隔开 #include

void main() {

int a[10]; int i;

for(i=0;i<10;++i)

scanf(\ for(i=0;i<9;++i) {

if(a[i]<100)

printf(\

if(a[i]>=100&&a[i]<110) printf(\

if(a[i]>=110&&a[i]<120) printf(\

if(a[i]>=120&&a[i]<130) printf(\ if(a[i]>=130)

printf(\ }

if(a[9]<100)

printf(\

if(a[9]>=100&&a[i]<110) printf(\

if(a[9]>=110&&a[i]<120) printf(\

if(a[9]>=120&&a[i]<130) printf(\ if(a[9]>=130) printf(\}

36题目标题:

电子钟模拟显示(谌海军) 题目描述:

电子钟用四位数字显示时间,从0000~2359。每位数字用一个3*3的字符('|','_',' ')来显示如数字8,

用数组表示为{{' ','_',' '},{'|','_','|'},{'|','_','|'}模拟显示如下: _ |_| |_|

要求给出一个给定的时间,模拟显示出来。

提示:设置10个3*3的数组,初始化为0~9的数字模拟显示; 定义一个3*12的数组,将4个数字对应的矩阵串起来后输出; 采用指向二维数组的指针解此题较为合适; 输入描述:

输入为两个数字,中间用分号隔开,表示需要模拟的时钟;时间十位为零时显示为0; 输出描述描述:

输出为一个电子时钟的模拟显示结果; #include

char a0[3][3]={{' ','_',' '},{'|',' ','|'},{'|','_','|'}}; char a1[3][3]={{' ',' ',' '},{' ',' ','|'},{' ',' ','|'}}; char a2[3][3]={{' ','_',' '},{' ','_','|'},{'|','_',' '}}; char a3[3][3]={{' ','_',' '},{' ','_','|'},{' ','_','|'}}; char a4[3][3]={{' ',' ',' '},{'|','_','|'},{' ',' ','|'}}; char a5[3][3]={{' ','_',' '},{'|','_',' '},{' ','_','|'}}; char a6[3][3]={{' ','_',' '},{'|','_',' '},{'|','_','|'}}; char a7[3][3]={{' ','_',' '},{' ',' ','|'},{' ',' ','|'}}; char a8[3][3]={{' ','_',' '},{'|','_','|'},{'|','_','|'}}; char a9[3][3]={{' ','_',' '},{'|','_','|'},{' ','_','|'}};

void main() {

char (*p[10])[3]; char c[3][12]; int i,j; int t,m;

int t1,t2,m1,m2;

p[0]=a0;p[1]=a1;p[2]=a2;p[3]=a3;p[4]=a4;p[5]=a5;p[6]=a6; p[7]=a7;p[8]=a8;p[9]=a9; scanf(\ if(t<10) t1=0; else

t1=t/10; t2=t; if(m<0) m1=0; else

m1=m/10; m2=m; for(i=0;i<3;++i) {

for(j=0;j<3;++j)

c[i][j]=*(*(p[t1]+i)+j); for(j=3;j<6;++j)

c[i][j]=*(*(p[t2]+i)+(j-3)); for(j=6;j<9;++j)

c[i][j]=*(*(p[m1]+i)+(j-6)); for(j=9;j<12;++j)

c[i][j]=*(*(p[m2]+i)+(j-9)); }

for(i=0;i<3;++i) {

for(j=0;j<12;++j) {

printf(\ }

printf(\ } }

37题目标题: 新式乘法(杨鼎强) 题目描述:

做厌了乘法计算的卡特,有一天突发奇想,自己创作了一种新的乘法运算法则,在这种新式法则里,X*Y等于一个取自X,一个取自Y的所有数字对的成绩和。例如;123*45等于1*4+1*5+2*4+2*5+3*4+3*5=54。而X?Y的限定条件为(1<=A?B<=1000000000),现在你的任务是用这种新的乘法法则计算X*Y的值。 输入描述:

第1行: 2个用空格隔开的整数:X?Y 输出描述描述:

第1行: 输出1个整数,即新的乘法法则下X*Y的值 #include

void main() {

long x,y,t; int s=0;

scanf(\ t=y; while(x) {

while(t) {

s=s+(x)*(t); t=t/10; }

x=x/10; t=y; }

printf(\}

38题目标题:

分割自然数游戏(杨鼎强) 题目描述:

周末强强在家做作业,遇到了这样一道题,找出N位(N<8)的自然数中具有下列性质的数:如果将这个数字从中间开始分割成两部分,然后将这两部分相加,所得到的和的平方,等于原来那个数的(奇数的时候,中间的那个数字靠前)。从键盘输入N,直接在屏幕上输出答

案。找不到满足要求的数时候,输出"NO FOUND"。强强想了许久也没想出来,想请你来帮忙,那么你该如何来帮助他呢? 输入描述: 输入N

输出描述描述:

符合条件的N位整数

39题目标题:

乐乐摘苹果(杨鼎强) 题目描述:

一天乐乐去果园玩,发现一棵苹果树上结出10个苹果。乐乐跑去摘苹果。乐乐找到一个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及乐乐把手伸直的时候能够达到的最大高度,请帮乐乐算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 输入描述:

输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示乐乐把手伸直的时候能够达到的最大高度。 输出描述描述:

输出包括一行,这一行只包含一个整数,表示乐乐能够摘到的果的数目。 #include void main() {

int a[10]; int height; int i,num=0; for(i=0;i<10;++i) scanf(\ scanf(\ for(i=0;i<10;++i) {

if(height+30>=a[i]) num++; }

printf(\}

#include

int fenge(int,int,long,int); void main() {

int N;

int i;

long begin=1,end=10,j,b[10]={0},m=0; scanf(\ for(i=0;i

begin=begin*10; end=end*10; }

for(j=begin;j

if(N%2==0) {

if((fenge(1,N/2,j,N)+fenge(N/2+1,N,j,N))*(fenge(1,N/2,j,N)+fenge(N/2+1,N,j,N))==j) b[m++]=j; } else {

if((fenge(1,N/2+1,j,N)+fenge(N/2+2,N,j,N))*(fenge(1,N/2+1,j,N)+fenge(N/2+2,N,j,N))==j) b[m++]=j; } }

if(m==0)

printf(\ else {

for(i=0;i

printf(\ } } }

int fenge(int b,int e,long s,int N) //b,e表示分割位,s表示数,N表示数的长度 {

int i,k=0,temp=1,d=1,total=0; int a[10]; long t=1; while(s) {

for(i=0;i

a[k]=s/t; k++; temp=0; s=s%t; t=t/10; }

for(i=0;i

total=total+a[i-1]*d; d=d/10; }

return total; }

40题目标题: 数字游戏(杨鼎强) 题目描述:

小明正在学习C语言程序设计,一天小明觉得无聊,便去找小刚玩,小刚给小明出了一道题,让小明输入一个五位以内的正整数,然后需要做到三件事。首先,判断输入的是几位数;然后,按序输出其各位数字;最后,逆序输出其各位数字。小明想了很久没有结果,请你帮帮小明该如何设计。 输入描述:

第1行: 输入一个整数n(0-9999) 输出描述描述:

第1行: 输出的是这个整数的位数第2行:输出的是这个整数最初顺序第3行:输出的是这个整数逆序输出 #include

void main() {

int N,a[10]; int i=0,j;

scanf(\ while(N) {

a[i]=N; N=N/10; i++; }

printf(\ for(j=i-1;j>0;--j) printf(\ printf(\

for(j=0;j

printf(\}

41题目标题: 车厢重组(杨鼎强) 题目描述:

在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。(此题就好比数列排序问题,桥墩相当于一个位置转换装置,一次可以转换相邻两节车厢的顺序,依次转换,直至所有的车厢号从小到大排列为止。) 输入描述:

输入文件有两行数据,第一行是车厢总数n(不大于1000),第二行是n个不同的数表示初始的车厢顺序。 输出描述描述:

一个数据,是最少的旋转次数。 #include

void main() {

int n,i,j,num=0,temp; int a[1000]; scanf(\ for(i=0;i

scanf(\ for(i=0;i

for(j=0;j

if(a[j]>a[j+1]) {

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; num++; } }

printf(\}

42题目标题:

亮亮的随机数(杨鼎强) 题目描述:

亮亮在做一个题,就是用计算机生成了N个1到1000之间的随机整数(N≤100),对于其

中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,可是他没有做出来,请你协助亮亮完成“去重”与“排序”的工作。 输入描述:

输入有2行,第1行为1个正整数,表示所生成的随机数的个数:N 。第2行有N个用空格隔开的正整数,为所产生的随机数。 输出描述描述:

输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。 #include void f(int *a,int n);

void main() {

int n,i,k=0;

int a[1000],b[1000]; scanf(\ for(i=0;i

scanf(\ f(a,n);

for(i=0;i

if(a[i]!=a[i+1]) b[k++]=a[i]; else {

b[k++]=a[i]; i++; }

}

printf(\ for(i=0;i

printf(\ printf(\}

void f(int *a,int n) {

int i,j,temp; for(i=0;i

for(j=0;j

if(a[j]>a[j+1]) {

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }

43题目标题:

不高兴的津津(杨鼎强) 题目描述:

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。(津津一天上课的时间应分为两部分:在学校的时间和在复习班的时间,这两个时间相加就是津津一天上课的时间。如果这个时间大于八小时津津就会不高兴。) 输入描述:

输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时 输出描述描述:

输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。 #include

void main() {

int i;

int t1[7],t2[7],t[7]; int max,d; for(i=0;i<7;++i) {

scanf(\ t[i]=t1[i]+t2[i]; }

max=t[0];

for(i=1;i<7;++i) {

if(max

if(max<8)

printf(\ else {

for(i=0;i<7;++i) {

if(max==t[i]) {

d=i+1; break; } }

printf(\ } }

44题目标题:

最低位(二进制的转换)(胡宁静) 题目描述:

任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。再例如,A=88,则二进制位1011000,则最低位是1000,输出为8。 输入描述:

输入包含一个整数A(1<=A<=109) 输出描述描述: 对应输入的最低位 #include

void main() {

int A; int a[12];

int k=0,i,t,result=1; scanf(\ while(A) {

a[k++]=A%2; A=A/2; } t=0;

while(t

if(a[t]==0) t++; else

break;

}

for(i=0;i

result=result*2; printf(\}

45题目标题:

Fibonacci数列(胡宁静) 题目描述:

Fibonacci数列{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...},可以如下定义: F0=0 F1=1

Fi=F(i-1)+F(i-2) 对于所有的i大于2 写个程序计算Fibonacci数 输入描述:

第一行为需要测试个数T,接着的T行,每一行包含一个数n(0<=n<=45 ),即你需要计算的F(n)

输出描述描述:

每输入一个数n,输出对应的F(n) #include int F(int n); void main() {

int T; int n;

scanf(\ while(T--) {

scanf(\ printf(\ } }

int F(int n) {

if(n==0)

return 0; else if(n==1) return 1; else

return F(n-1)+F(n-2); }

46题目标题:

蛇形矩阵(胡宁静) 题目描述:

蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形 输入描述:

矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵 #include #define N 20 void main() {

int a[N][N]={0}; int i,j,t;

scanf(\ a[0][0]=1; for(i=1;i

a[i][0]=a[i-1][0]+i;

for(i=0;i

for(j=1;j

a[i][j]=a[i][j-1]+i+(j+1); for(i=0;i

for(j=0;j

printf(\ printf(\ } }

47题目标题: 猪的安家(胡宁静) 题目描述:

Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。 输入描述:

输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10),表示Andy建立猪圈的次数,接下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1 #include #define N 20 void main()

{

int a[N][N]={0}; int i,j,t;

scanf(\ a[0][0]=1; for(i=1;i

a[i][0]=a[i-1][0]+i;

for(i=0;i

for(j=1;j

a[i][j]=a[i][j-1]+i+(j+1); for(i=0;i

for(j=0;j

printf(\ printf(\ } }

48题目标题:

整数划分(胡宁静) 题目描述:

整数划分是一个经典的问题,希望这道题对你的组合数学有所帮助. 提示

1. 将5划分成若干正整数之和的划分为: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1 2. 将5划分成2个正整数之和的划分为: 3+2, 4+1

3. 将5划分成最大数不超过2的划分为: 1+1+1+1+1, 1+1+1+2, 1+2+2 4. 将5划分成若干奇正整数之和的划分为: 5, 1+1+3, 1+1+1+1+1 5. 将5划分成若干不同整数之和的划分为: 5, 1+4, 2+3 输入描述:

每组输入是两个整数n和k。(1<=n<=50,1<=k<=n) 输出描述描述:

对于每组输入,请输出6行第一行:将n划分成若干正整数之和的划分数。第二行:将n划分成k个正整数之和的划分数。第三行:将n划分成最大数不超过k的划分数。第四行:将n划分成若干奇正整数之和的划分数。第五行:将n划分成若干不同整数之和的划分数。第六行:打印一个空行

49题目标题:

最大乘积的整数的拆分(胡宁静) 题目描述:

将一个整数N分解成各不相同的加数的和,使这些加数的乘机最大。N范围为[5,1000] 输入描述:

输入一个整数N(5<=N<=1000) 输出描述描述:

能够使得积最大的加数序列 #include #define N 20 void main() {

int a[N][N]={0}; int i,j,t;

scanf(\ a[0][0]=1; for(i=1;i

a[i][0]=a[i-1][0]+i;

for(i=0;i

for(j=1;j

a[i][j]=a[i][j-1]+i+(j+1); for(i=0;i

for(j=0;j

printf(\ printf(\ } }

50题目标题: 插队(胡宁静) 题目描述:

编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。

例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为: 1 2 3 6 7 9; 输入描述:

输入包含两部分,第一部分先输入n,表示数组中元素个数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待插入的数据 输出描述描述:

新的排序好的数组元素 #include #define N 20 void main() {

int a[N][N]={0}; int i,j,t;

scanf(\ a[0][0]=1; for(i=1;i

a[i][0]=a[i-1][0]+i;

for(i=0;i

for(j=1;j

a[i][j]=a[i][j-1]+i+(j+1); for(i=0;i

for(j=0;j

printf(\ printf(\ } }

51题目标题: 卫星定位(胡宁静) 题目描述:

编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。

例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出-1; 输入描述:

输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据 输出描述描述: 待查找的元素位置 #include

void main() {

int n,i,a[20],t; scanf(\ for(i=0;i

scanf(\ scanf(\ for(i=0;i

if(t==a[i]) {

printf(\ break; } }

if(i==n)

printf(\}

52题目标题: 警察抓贼(胡宁静) 题目描述:

编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个 输入描述:

输入包含两部分,第一部分先输入n,接着输入n个原数据。 第二部分为待删除的元素; 输出描述描述:

删除特定元素后的剩余元素 #include

void main() {

int n,i,a[1000],t,num=0; int k=0;

scanf(\ for(i=0;i

scanf(\ scanf(\ for(i=0;i

if(t==a[i]) num++; }

if(num%2==0) {

for(i=0;i

if(t==a[i]) k++; if(k==num/2) {

k=n;

continue; }

printf(\ } } else {

for(i=0;i

if(t==a[i])

k++;

if(k==(num+1)/2) {

k=n;

continue; }

printf(\ } } }

53题目标题: 是非黑白(胡宁静) 题目描述:

编写函数实现两个等长字符串大小比较。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串,如果相等则返回0; 输入描述:

输入待比较的两个字符串 输出描述描述: 字符串比较结果 #include #include void main() {

char a[100],b[100]; int len,i,temp; scanf(\ scanf(\ len=strlen(a); for(i=0;i

if(a[i]

temp=1; break; }

else if(a[i]>b[i]) {

temp=2; break; } }

if(i==len)

printf(\ else if(temp==1) printf(\ else if(temp==2) printf(\ }

54题目标题: 搭桥(胡宁静) 题目描述:

编写函数将两个升序排列的字符串融合成一个字符串,融合后的字符串仍然是升序排列的。 输入描述:

输入两升序字符串 输出描述描述: 融合后的字符串 #include #include void main() {

char a[100],b[100],c[200],temp; int a_len,b_len,i,j,k=0; gets(a); gets(b);

a_len=strlen(a); b_len=strlen(b); for(i=0;i

c[i]=a[i]; }

for(i=a_len;i

c[i]=b[i-a_len]; }

for(i=0;i

for(j=i+1;j

if(c[i]>c[j]) {

temp=c[i]; c[i]=c[j]; c[j]=temp; } }

for(i=0;i

55题目标题: 一清二楚(胡宁静) 题目描述:

输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格) 输入描述:

一混合字符串,最大长度为200 各类字符出现频率 输出描述描述: 各类字符出现频率 #include #include void main() {

char a[200];

int len,i,num1=0,num2=0,num3=0; gets(a);

len=strlen(a); for(i=0;i

if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) num1++;

else if(a[i]>='0'&&a[i]<='9') num2++; else

num3++; }

printf(\字母:%d\\n\ printf(\数字:%d\\n\ printf(\其他:%d\\n\}

56题目标题: 克隆(胡宁静) 题目描述:

编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串

输出描述描述: 输出第二个字符串

#include #include

void main() {

char a[100],b[100]; int a_len,b_len,i; gets(a); gets(b);

a_len=strlen(a); b_len=strlen(b); if(a_len

for(i=0;i

for(i=0;i

本文来源:https://www.bwwdw.com/article/iyb8.html

Top