max=a[i];
}
printf("%d",max);
}
第四题
#include
doublef(int);
voidmain()
{
intn;
scanf("%d",&n);
printf("%.8f",f(n));
}
doublef(intn)
{
inti;
doubleresult=0.0;
for(i=1;i<=n;i++)
result=result+(double)1/i;
returnresult;
}
5题目标题:
汽水瓶(谌海军)
题目描述:
有这样一道智力题:
“某商店规定:
三个空汽水瓶可以换一瓶汽水。
小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?
”答案是5瓶,
方法如下:
先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入描述:
输入为一个正整数n(1<=n<=100),表示空汽水瓶个数。
#include
voidmain()
{intn,m=0,sum=0,i=0;
scanf("%d",&n);
while(n>=3)
{m=n/3;
n=n-2*m;
sum=sum+m;
}
if(n=2)
sum++;
elseif(n<2)
sum=sum+i;
printf("%d",sum);
}
6题目标题:
栽树(彭玉旭)
题目描述:
在某食堂门前有n(n<200)个树坑,编号是从0~n-1,开始时是没有树的。
每个月,园林工人都会在编号a~b(0<=a<=b<=n-1)之间栽树(包括a,b),如果树坑原来有树,则不需要从新栽树。
请计算4个月后,食堂门前总共有多少棵树。
输入描述:
第一个整数是n,接下来有8个整数,分别为每个月栽树的编号。
输出描述描述:
食堂门前树的总数。
第六题
#include
voidmain()
{
intn;
inta1,b1,a2,b2,a3,b3,a4,b4;
intresult=0;
inti;
scanf("%d",&n);
scanf("%d%d",&a1,&b1);
scanf("%d%d",&a2,&b2);
scanf("%d%d",&a3,&b3);
scanf("%d%d",&a4,&b4);
for(i=0;i{
if(i>=a1&&i<=b1)
result++;
elseif(i>=a2&&i<=b2)
result++;
elseif(i>=a3&&i<=b3)
result++;
elseif(i>=a4&&i<=b4)
result++;
}
printf("%d",result);
}
7题目标题:
密码破译(闫博钊)
题目描述:
某组织欲破获一个外星人的密码,密码由一定长度的字串组成。
此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。
现在就请你编程找出能破译此密码的两个钥匙。
输入描述:
输入第一行为钥匙的个数N(1≤N≤5000)
输入第二行为密码的长度
以下N行为每个钥匙的长度
输出描述描述:
若无法找到破译此密码的钥匙,则输出仅1行0。
若找到两把破译的钥匙,则输出有两行,分别为两把钥匙的编号。
若有多种破译方案,则只输出一种即可。
#include
voidmain()
{
intn,s[5000],l,i,j,sign=1,m=0;
scanf("%d",&n);
scanf("%d",&l);
for(i=0;i scanf("%d",&s[i]);
for(i=0;i {
if(sign==0)break;
for(j=i+1;j if(s[i]+s[j]==l)
{printf("%d\n%d",i+1,j+1);sign=0;break;}}
if(sign)printf("%d",m);
}
#include
voidmain()
{intm,n,sum,i,j,a[5000];
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;ifor(j=i+1;j<=n;j++)
{sum=a[i]+a[j];
p=sum-m;
if(p==0)
printf("%d\n%d",i,j);
}
}
#include
voidmain()
{
intN,length;
inti,j,key[5000];
intnum1,num2,t;
scanf("%d",&N);
scanf("%d",&length);
for(i=0;i scanf("%d",&key[i]);
t=1;
for(i=0;i for(j=i+1;j {
if(key[i]+key[j]==length)
{
num1=i+1;
num2=j+1;
t=0;
break;
}
}
if(t==1)
printf("0");
else
printf("%d\n%d",num1,num2);
}
9题目标题:
基因编码(闫博钊)
题目描述:
小可可选修了基础生物基因学。
教授告诉大家SuperSamuel星球上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
voidf(chara[],intbegin,intend);
intmain()
{
chara[500];
intlength;
gets(a);
length=strlen(a);
f(a,0,length);
return0;
}
voidf(chara[],intbegin,intend)
{
intnum_A=0,num_B=0;
inti;
for(i=begin;i{
if(a[i]=='0')
num_A++;
elseif(a[i]=='1')
num_B++;
}
if(num_A==end-begin)
printf("A");
elseif(num_B==end-begin)
printf("B");
else
{
printf("C");
f(a,begin,(end+begin)/2);
f(a,(end+begin)/2,end);
}
}
10题目标题:
最大公约数(闫博钊)
题目描述:
输入两个整数a,b(1≤a,b≤100000),请编写程序求出他们的最大公约数。
输入描述:
输入两个整数ab,用空格隔开
输出描述描述:
输出对应a,b的最大公约数
#include
voidmain()
{longa,b,c,t;
scanf("%ld%ld",&a,&b);
if(a
{
t=a;
a=b;
b=t;
}
while(b!
=0)
{
c=a%b;
a=b;
b=c;
}
printf("%ld",a);
}
11题目标题:
大数相加(彭玉旭)
题目描述:
a+b这个程序大家都会做,但是如果a和b都比较大时该怎么办呢。
其实我们可以把输入一个比较大的数用字符串表示,模拟人工加法方式。
如123+23,一个字符串是123另外一个字符串是23,从字符串的最后开始加,得到146.结果最大是两个字符串最长的那个值加1。
现在请你计算两个不超过30位的十进制的数的和。
知识点:
字符串输入,字符的0~9的加法运算。
提示:
字符0的ASCII是48,注意进位处理
输入描述:
包行四行,每一行包含不超过30个的由0~9的字符组成字符串。
输出描述描述:
第一行加第二行的和以及第三行加第四行的和。
每一个和占一行
#include
#include
char*add_high_jd(char*a,char*b)
{
char*s;
intlenmax,lenmin,i,key=0,m;
if(strlen(b)>strlen(a)){s=a;a=b;b=s;}
lenmax=strlen(a);
lenmin=strlen(b);
for(i=1;i<=lenmin;i++)
{
m=a[lenmax-i]+b[lenmin-i]-96+key;
if(m>=10)
{
a[lenmax-i]=m%10+48;
key=1;
}
else
{
a[lenmax-i]=m+48;
key=0;
}
}
for(i=1;i<=lenmax-lenmin;i++)
{
m=a[lenmax-lenmin-i]-48+key;
if(m>=10)
{
a[lenmax-lenmin-i]=m%10+48;
key=1;
}
else{
a[lenmax-lenmin-i]=m+48;
key=0;
}
}
if(key)
{
for(i=lenmax;i>=1;i--)
a[i]=a[i-1];
a[0]='1';
a[lenmax+1]='\0';
}
returna;
12题目标题:
字符串比对(谌海军)
题目描述:
有字符串a(长度<=100),b(长度<=10),计算b串在a串中出现的次数。
解题思路:
1、用gets语句从键盘输入两个字符串赋予a,b字符数组;
2、建立两层嵌套循环,外循环至a串结束标志为止,内循环至b串结束标志为止;
3、内循环中比对b串与a串的数据,满足条件时计数,否则break;
4、所有循环结束后输出计数值。
输入描述:
输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10;
输出描述描述:
输出为一个正整数;
#include
#include
voidmain()
{
chara[100],b[10];
inti,j,count,result;
gets(a);
gets(b);
result=0;
for(i=0;i{
for(j=0,count=0;j{
if(b[j]==a[i+j])
count++;
else
break;
}
if(count==strlen(b))
result++;
}
printf("%d",result);
}
}
intmain()
{
chara[40]={'0'},b[40]={'0'},c[40]={'0'},d[40]={'0'},e[40]={'0'},f[40]={'0'};
while(gets(a)!
=NULL&&gets(b)!
=NULL&&gets(c)!
=NULL&&gets(d)!
=NULL)//?
?
?
?
?
?
×?
?
?
0±í?
?
?
á?
?
{
strcpy(e,add_high_jd(a,b));
strcpy(f,add_high_jd(c,d));
puts(e);//?
?
?
?
?
?
...
puts(f);//?
?
?
?
?
?
...
}
return0;
}
13题目标题:
围圈报数(谌海军)
题目描述:
有n(n<=100)围成一圈,顺序排号(从1排到n)。
从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子,
问最后留下的是原来第几号的那位?
解题思路:
1、定义一个长度为100数组a,初始化为0;
2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n;
3、建立两层嵌套循环,外循环至退出人数为n-1为止,
内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;
4、循环全部结束后输出最后留下的一个a数组的非零元素的值。
输入描述:
输入为两个正整数,第一个<=100,第二个<=9;
输出描述描述:
输出为一个正整数;
#include
#defineN100
voidmain()
{
inta[N]={0};
intn,m;
inti;
intk=0,t=0,s;
scanf("%d%d",&n,&m);
s=n;
for(i=0;ia[i]=i+1;
while(n>1)
{
if(a[k%s]!
=0)
t++;
if(t==m)
{
n--;
a[k%s]=0;
t=0;
}
k++;
}
for(i=0;i
{
if(a[i]!
=0)
printf("%d",a[i]);
}
}
14题目标题:
星期几?
(谌海军)
题目描述:
编一个程序,已知今天是星期几,计算出n天后是星期几。
要求使用枚举变量。
提示:
枚举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表,
可将改整形数存入枚举变量地址以实现外部赋值的目的。
如:
enumday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}d1;
scanf("%d",&d1);
当键盘输入1时,相当于将d1赋值为Mon,即d1=Mon
枚举变量的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方式处理;
如:
char*p[]={“Sun”,“Mon”,“Tue”,"Wed","Thu","Fri","Sat"};
printf("%s",*(p+2));
其输出结果为:
Tue
输入描述:
输入为两个正整数,第一个数n(n<=6)表示今天是星期几,
第二个数m(m<=1000),表示求m天后是星期几;
输出描述描述:
输出为一个长度为3的字符串,表示星期几的名称;
#include
voidmain()
{
enumday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}d;
char*p[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
intm;
scanf("%d%d",&d,&m);
printf("%s",*(p+(d+m)%7));
}
15题目标题:
abc+cba=1333(卜胜贤)
题目描述:
已知abc+cba=1333,其中a,b,c均为一位数,编程求出所有满足条件的a,b,c所有组合。
(知识点:
控制语句)
输入描述:
无
输出描述描述:
输出数据为多组,每组两个整形数
#include
voidmain()
{
inta,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("%d%d\n",a*100+b*10+c,c*100+b*10+a);
}
}
16题目标题:
整数各位取奇数(卜胜贤)
题目描述:
将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
87653142时,t中的数为:
7531。
(知识点:
控制语句、函数、指针)
输入描述:
输入数据为一个不大于100000000的整形数;
输出描述描述:
输出数据为一个不大于100000000的整形数;
#include
voidmain()
{
inta;
intb;
intsum=0;
intcount=0;
intbase=1;
scanf("%d",&a);
while(a!
=0)
{
b=a%10;
a=a/10;
if(1==b%2)
{
sum=sum+base*b;
base=base*10;
count++;
}
}
printf("%d",sum);
}
17题目标题:
四位反序数(卜胜贤)
题目描述:
设N是一个四位数,它的n倍恰好是其反序数(例如:
123的反序数是321),
编程,输出一个满足条件的N。
(知识点:
控制语句)
输入描述:
输入为一个整形数n(2<=n<=9)
输出描述描述:
输出为一个四位数的整形数
#include
intnumber(intn);
voidmain()
{
intn,i,t=0;
scanf("%d",&n);
for(i=1000;i<10000;i++)
{
if(i*n==number(i))
{
t=i;
break;
}
}
printf("%d",t);
}
intnumber(intn)
{
inta1,a2,a3,a4;
intresult;
a1=n%10;
a2=n/10%10;
a3=n/100%10;