分割自然数游戏
题目描述: 周末强强在家做作业,遇到了这样一道题,找出N位(N<8)的自然数中具有下列性质的数:如果将这个数字从中间开始分割成两部分,然后将这两部分相加,所得到的和的平方,等于原来那个数的(奇数的时候,中间的那个数字靠前)。从键盘输入N,直接在屏幕上输出答案。找不到满足要求的数时候,输出"NO FOUND"。强强想了许久也没想出来,想请你来帮忙,那么你该如何来帮助他呢? 输入描述: 输入N 输出描述描述: 符合条件的N位整数 样式输入:
4
样式输出:
2025 3025 9801
源代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,x1,x2,sum=0,min,max,k;
int a[10];
scanf("%d",&n);
min=pow(10,n-1);//划分整数段。
max=pow(10,n);
if(n!=1)
{
for(i=min;i<max;i++)
{
k=pow(10,n/2);//划分分割段。
x1=i%k;//右边的数。
x2=i/k;//左边的数。
if((x1+x2)*(x1+x2)==i)
{
a[sum]=i;
sum++;
}
}
if(sum==0)
printf("NO FOUND");
else
{
for(j=0;j<sum-1;j++)
printf("%d\n",a[j]);
printf("%d",a[sum-1]);
}
}
else
printf("NO FOUND");
return 0;
}
乐乐摘苹果
题目描述: 一天乐乐去果园玩,发现一棵苹果树上结出10个苹果。乐乐跑去摘苹果。乐乐找到一个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知10个苹果到地面的高度,以及乐乐把手伸直的时候能够达到的最大高度,请帮乐乐算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 输入描述: 输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 第二行只包括一个100到120之间(包含100和120) 的整数(以厘米为单位),表示乐乐把手伸直的时候能够达到的最大高度。 输出描述描述: 输出包括一行,这一行只包含一个整数,表示乐乐能够摘到的果的数目。 样式输入:
100 200 150 140 129 134 167 198 200 111 110
样式输出:
5
源代码
#include <stdio.h>
int main()
{
int a[10],i,sum=0,n;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
for(i=0;i<10;i++)
if(a[i]<=n+30)
sum++;
printf("%d",sum);
return 0;
}
不高兴的津津
题目描述: 津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。(津津一天上课的时间应分为两部分:在学校的时间和在复习班的时间,这两个时间相加就是津津一天上课的时间。如果这个时间大于八小时津津就会不高兴。) 输入描述: 输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间 输出描述: 输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。 样式输入:
5 3 6 2 7 2 5 3 5 4 0 4 0 6
样式输出:
3
源代码
#include<stdio.h>
int main()
{
int a,b;
int max,k,i;
max=8;
for(i=0;i<7;i++)
{
scanf("%d %d",&a,&b);
if(a+b>max)
{
max=a+b;
k=i+1;
}
}
if(max==8)
printf("0\n");
else
printf("%d\n",k);
return 0;
}
最低位(二进制的转换)
题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。再例如,A=88,则二进制位1011000,则最低位是1000,输出为8。 输入描述: 输入包含一个整数A(1<=A<=109) 输出描述: 对应输入的最低位 样式输入:
8
样式输出:
8
源代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,i=0,j,z,a[8],b[8],s=0;
scanf("%d",&n);
while(n)
{
a[i]=n%2;
n/=2;
i++;
}
for(j=0;j<i;j++)
{
b[j]=a[j];
if(a[j]==1)
break;
}
for(z=0;z<=j;z++)
if(b[z]!=0)
s+=pow(2,z);
printf("%d",s);
return 0;
}
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) 样式输入:
5 0 3 5 9 20
样式输出:
0 2 5 34 6765
源代码
#include<stdio.h>
int main()
{
int n,i,k,a[46];
scanf("%d",&n);
a[0]=0;
a[1]=1;
for(i=2;i<=45;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<n;i++)
{
scanf("%d",&k);
printf("%d",a[k]);
if(i<n-1)
printf("\n");
}
return 0;
}
蛇形矩阵
题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:
5
样式输出:
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
源代码
#include<stdio.h>
int main()
{
int n,a[20]={1},i,j;
int N,k,z,s;
scanf("%d",&N);
n=N;
for(i=0,z=1;i<N-1;i++)
{
s=i+2;
for(j=1;j<n;j++)
{
a[j]=a[j-1]+s;
s++;
}
for(k=0;k<n-1;k++)
printf("%d ",a[k]);
printf("%d\n",a[n-1]);
a[0]+=z;
z++;
n--;
}
printf("%d",a[0]);
return 0;
}
猪的安家
题目描述: 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 输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目
样式输入:
3 3 1 5 1 7 2
源代码
#include<stdio.h>
int main()
{
int n,ai,bi;
int i,j,k,a[1000],s=1000;
scanf("%d",&n);
for(i=0;i<1000;i++)
a[i]=i+1;
for(i=0;i<n;i++)
{
scanf("%d %d",&ai,&bi);
k=0;
for(j=0;j<s;j++)
if(a[j]%ai==bi)
{
a[k]=a[j];
k++;
}
s=k;
}
if(k!=0)
printf("%d",a[0]);
return 0;
}
最大乘积的整数的拆分
题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000] 输入描述: 输入一个整数N(5<=N<=1000) 输出描述描述: 能够使得积最大的加数序列 样式输入:
7
样式输出:
3 4
源代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%3==1)
{
n-=4;
while(n)
{
printf("3 ");
n-=3;
}
printf("4");
}
else if(n%3==2)
{
printf("2");
n-=2;
while(n)
{
printf(" 3");
n-=3;
}
}
else
{
printf("3");
n-=3;
while(n)
{
printf(" 3");
n-=3;
}
}
return 0;
}
插队
题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9; 输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素个数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待插入的数据 输出描述描述: 新的排序好的数组元素 样式输入:
5 1 2 6 7 9 3
样式输出:
1 2 3 6 7 9
源代码
#include<stdio.h>
int main()
{
int a[101],n,i,j;
int s,temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&s);
for(i=0;i<n;i++)
{
if(a[i]>s)
{
for(j=n;j>i;j--)
a[j]=a[j-1];
a[i]=s;
break;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);
return 0;
}
2源代码
#include<stdio.h>
int main()
{
int i,a[21],n,m,k=0,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<n;i++)
if(a[i]>m)
{
k=1;
for(j=n;j>i;j--)
a[j]=a[j-1];
a[i]=m;
break;
}
if(k==0)
a[n]=m;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);
return 0;
}
卫星定位
题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出-1; 输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据 输出描述描述: 待查找的元素位置 样式输入:
5 1 2 6 7 9 7
样式输出:
4
源代码
#include<stdio.h>
int main()
{
int i,a[20],n,m,k=-1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<n;i++)
if(a[i]==m)
{
k=i+1;
break;
}
printf("%d",k);
return 0;
}
警察抓贼
题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个 输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素; 输出描述描述: 删除特定元素后的剩余元素 样式输入:
8 1 3 4 6 3 5 3 6 3
样式输出:
1 3 4 6 5 3 6
源代码
#include<stdio.h>
int main()
{
int n,a[1000];
int s,i,t=0,m,j=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&s);
for(i=0;i<n;i++)
if(a[i]==s)
t++;
if(t%2!=0)
m=(t+1)/2;
else
m=t/2;
for(i=0;i<n-1;i++)
{
if(a[i]!=s)
printf("%d ",a[i]);
else
{
j++;
if(j!=m)
printf("%d ",a[i]);
}
}
if(a[n-1]!=s)
printf("%d ",a[n-1]);
else
{
j++;
if(j!=m)
printf("%d ",a[n-1]);
}
return 0;
}
2源代码
#include<stdio.h>
int main()
{
int n,a[1000];
int s,i,t=0,m,j=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&s);
for(i=0;i<n;i++)
if(a[i]==s)
t++;
if(t%2!=0)
m=(t+1)/2;
else
m=t/2;
for(i=0;i<n;i++)
{
if(a[i]!=s)
printf("%d ",a[i]);
else
{
j++;
if(j!=m)
printf("%d ",a[i]);
}
}
return 0;
}
是非黑白
题目描述: 编写函数实现两个等长字符串大小比较。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串,如果相等则返回0; 输入描述: 输入待比较的两个字符串 输出描述描述: 字符串比较结果 样式输入:
abcdefg abcdeff
样式输出:
abcdefg
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[81],b[81];
int i,len1,len2,max,s1=0,s2=0;
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
max=(len1>len2)?len1:len2;
for(i=0;i<len2;i++)
{
if(a[i]<b[i])
{
s2++;
break;
}
if(a[i]>b[i])
{
s1++;
break;
}
}
if(s1==1)
puts(a);
if(s2==1)
puts(b);
if(s1==0 && s2==0)
{
if(len1>len2)
puts(a);
else if(len1<len2)
puts(b);
else
printf("0");
}
return 0;
}
搭桥
题目描述: 编写函数将两个升序排列的字符串融合成一个字符串,融合后的字符串仍然是升序排列的。 输入描述: 输入两升序字符串 输出描述描述: 融合后的字符串 样式输入:
acefi bdfg
样式输出:
abcdeffgi
#include<stdio.h>
#include<string.h>
int main()
{
char a[162],b[81];
int i,j,len,temp;
scanf("%s",a);
scanf("%s",b);
strcat(a,b);
len=strlen(a);
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
puts(a);
return 0;
}
2源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[162],b[81];
int i,j,len,temp;
scanf("%s",a);
scanf("%s",b);
strcat(a,b);
len=strlen(a);
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
puts(a);
return 0;
}
一清二楚
题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格) 输入描述: 一混合字符串,最大长度为200 各类字符出现频率 输出描述描述: 各类字符出现频率 样式输入:
abcdefg9999////
样式输出:
ch:7 num:4 other:4
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[200];
int ch=0,num=0,other=0,len,i;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='0' && a[i]<='9')
num++;
else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
ch++;
else
other++;
}
printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
return 0;
}
2源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[200];
int ch=0,num=0,other=0,len,i;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='0' && a[i]<='9')
num++;
else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
ch++;
else
other++;
}
printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
return 0;
}
克隆
题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串 输出描述描述: 输出第二个字符串,注意:输出不换行。 样式输入:
Abdfeg Bdfad
样式输出:
Abdfe
源代码
#include<stdio.h>
#include<string.h>
int main()
{
1: char a[100],b[100];
int len1,len2,i;
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
if(len1<len2)
{
for(i=0;i<len1;i++)
b[i]=a[i];
b[len1]='\0';
}
else
{
for(i=0;i<len2;i++)
b[i]=a[i];
}
puts(b);
return 0;
}
2源代码
#include<stdio.h>
#include<string.h>
int main()
{
int len1,len2,i;
char a[100],b[100];
gets(a);
gets(b);
len1=strlen(a);
len2=strlen(b);
if(len1<len2)
for(i=0;i<len1;i++)
printf("%c",a[i]);
else
{
for(i=0;i<len2;i++)
printf("%c",a[i]);
}
return 0;
}
四则运算程序
题目描述: 编制一个完成两个数的四则运算程序(加、减、乘、除)。如:用户输入34+56则输出结果34.00+56.00=90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。 数字可能是整数,也可能是浮点数。 知识点:格式输出,格式输入,条件语句 输入描述: 包含5组测试数据,每一组占一行,每一行包含数字和字符,运算结果不超过double范围。 输出描述描述: 两个数的运算的结果,如果运算符不为加、减、乘、除,则输出Input Error! 每个数字保留两位小数精度。 样式输入:
1+1 1-1 1*1 1/1 1^1
样式输出:
1.00+1.00=2.00 1.00-1.00=0.00 1.00*1.00=1.00 1.00/1.00=1.00 Input Error!
源代码
#include<stdio.h>
int main()
{
double a,b,s;
char c;
while(scanf("%lf%c%lf",&a,&c,&b)!=EOF)
{
if(c=='+')
{
s=a+b;
printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
}
else if(c=='-')
{
s=a-b;
printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
}
else if(c=='*')
{
s=a*b;
printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
}
else if(c=='/')
{
s=a/b;
printf("%.2lf%c%.2lf=%.2lf\n",a,c,b,s);
}
else
printf("Input Error!\n");
}
return 0;
}
落体球反弹
题目描述: 一球从某个高度(大于等于100米)自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?。(保证6位精度) 输入描述: 高度为大于等于100米的实数,范围在double内。 输出描述描述: 第10次落地时,经过多少米,第10次反弹高度。 样式输入:
100
样式输出:
299.609375 0.097656
#include<stdio.h>
int main()
{
int i=0,k=10;
double sn,h,sum,n;
scanf("%lf",&n);
sum=n;
while(i<k)
{
sn=n/2.0;
sum+=(2*sn);
n=sn;
i++;
}
printf("%.6lf\n%.6lf",sum-(2*sn),sn);
return 0;
}
电话薄管理
题目描述: 利用结构体类型数组输入五位用户的姓名和电话号码,按姓名的字典顺序排列后(姓名相同保持原位置),输出用户的姓名和电话号码。 已知结构体类型如下:
struct user { char name[20]; char num[10]; };
输入描述:
输入姓名字符串和电话号码字符串。
输出描述描述:
输出按姓名排序后的姓名字符串和电话号码字符串。每行的最后一个字符后不能有空格.所有输出的最后一行不能有回车
样式输入:
aa 12345 dd 23456 cc 34567 bb 21456 ee 12456
样式输出:
aa 12345 bb 21456 cc 34567 dd 23456 ee 12456
源代码
#include<stdio.h>
#include<string.h>
struct user
{ char name[20];
char num[10];
};
int main()
{
int n=5,i=0,j;
char temp1[20],temp2[10];
struct user user[5];
while(n)
{
scanf("%s",user[i].name);
scanf("%s",user[i].num);
i++;
n--;
}
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(user[i].name,user[j].name)>0)
{
strcpy(temp1,user[i].name);
strcpy(user[i].name,user[j].name);
strcpy(user[j].name,temp1);
strcpy(temp2,user[i].num);
strcpy(user[i].num,user[j].num);
strcpy(user[j].num,temp2);
}
for(i=0;i<4;i++)
printf("%s\n%s\n",user[i].name,user[i].num);
printf("%s\n%s",user[4].name,user[4].num);
return 0;
}
校门外的树
题目描述: 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。 输入描述: 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出描述描述: 输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。所有输出的最后一行不能有回车 样式输入:
500 3 150 300 100 200 470 471
样式输出:
298
源代码
#include<stdio.h>
int main()
{
int L,M,sum,i,min,max;
int a[10000];
scanf("%d%d",&L,&M);
sum=L+1;
for(i=0;i<=L;i++)
a[i]=1;
while(M)
{
scanf("%d%d",&min,&max);
for(i=min;i<=max;i++)
a[i]=0;
M--;
}
for(i=0;i<=L;i++)
if(a[i]==0)
sum--;
printf("%d",sum);
return 0;
}
歌手比赛
题目描述: 青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 输入描述: 10个评委的分数,每个分数是一个浮点数.输入数据保证有一个最低分,一个最高分,且最高分,最低分不相同.其它是数据与最低、最高均不相同 输出描述描述: 输出歌手的得分,保留一位小数.所有输出的最后一行不能有回车 样式输入:
8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2
样式输出:
8.8
源代码
#include<stdio.h>
int main()
{
double a[10],min,max,sum=0;
int i;
for(i=0;i<10;i++)
scanf("%lf",&a[i]);
max=a[0];
min=a[0];
for(i=1;i<10;i++)
{
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
for(i=0;i<10;i++)
sum+=a[i];
sum-=max+min;
sum=sum/8.0;
printf("%.1lf",sum);
return 0;
}
二维数组转置
题目描述: 编程实现使给定的一个N×M的二维整型数组转置,即行列互换。 输入描述: 第一行是两个整数N和M ,接下来N行整数,每行包含M个整数。整数之间用空格隔开 输出描述描述: 输出转置后的二维整型数组.每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入:
2 3 1 2 3 4 5 6
样式输出:
1 4 2 5 3 6
源代码
#include <stdio.h>
int main()
{
int a[100][100],i,j,n,m;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m-1;i++)
{
for(j=0;j<n-1;j++)
printf("%d ",a[j][i]);
printf("%d\n",a[n-1][i]);
}
for(i=0;i<n-1;i++)
printf("%d ",a[i][m-1]);
printf("%d",a[n-1][m-1]);
return 0;
}
魔方矩阵
题目描述: 输入一奇数n(n<20),打印出1->nn构成的魔方矩阵。 魔方矩阵的行列及对角线的和都相等。输入描述: 输入一奇数n(n<20) **输出描述描述:** 打印出1->nn构成的魔方矩阵,每一个数据之间用一个空格隔开,但每行的最后一个数据后不能有空格.所有输出的最后一行不能有回车 样式输入:
3
样式输出:
8 1 6 3 5 7 4 9 2
源代码
#include<stdio.h>
int main()
{
int a[20][20],i,j,n,k=1,m1,m2;
scanf("%d",&n);
for(i=0;i<20;i++)
for(j=0;j<20;j++)
a[i][j]=0;
while(k!=n*n+1)
{
if(k==1)
{
a[0][n/2]=1;
m1=0;
m2=n/2;
}
else
{
if(m1==0&&m2!=n-1)
{
if(a[n-1][m2+1]==0)
{
a[n-1][m2+1]=k;
m1=n-1;
m2++;
}
else
{
a[m1+1][m2]=k;
m1++;
}
}
else if(m2==n-1&&m1!=0)
{
if(a[m1-1][0]==0)
{
a[m1-1][0]=k;
m1--;
m2=0;
}
else
{
a[m1+1][m2]=k;
m1++;
}
}
else
{
if(a[m1-1][m2+1]==0)
{
a[m1-1][m2+1]=k;
m1--;
m2++;
}
else
{
a[m1+1][m2]=k;
m1++;
}
}
}
k++;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
printf("%d ",a[i][j]);
printf("%d\n",a[i][n-1]);
}
for(j=0;j<n-1;j++)
printf("%d ",a[n-1][j]);
printf("%d",a[n-1][n-1]);
return 0;
}
统计
题目描述: 统计个位数为6的n位数,且能被m整除的共有多少个? 输入描述: 一个整数n(n<=5),表示该整数的位数,一个整数m(1~9); 输出描述描述: 符合条件的数的个数。 样式输入:
2 3
样式输出:
3
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,i,sum=0,min,max;
scanf("%d%d",&n,&m);
min=pow(10,n-1);
max=pow(10,n);
for(i=min;i<max;i++)
if(i%10==6)
if(i%m==0)
sum++;
printf("%d",sum);
return 0;
}
四位数
题目描述: 计算满足下述条件的四位数的个数:把数字abcd重新组成两个新的两位数:ac及db, 如果新组成的两个十位数ac>db,且ac必须是偶数且能被n(n为1~9的整数)整除,db必须是奇数,同时两个新数的十位数字均不为零。 输入描述: 一个1~9的整数。 输出描述描述: 符合条件的数的个数。 样式输入:
5
样式输出:
180
源代码
#include<stdio.h>
int main()
{
int n,s,i,x,y,sum=0;
scanf("%d",&n);
for(i=1000;i<10000;i++)
{
x=i%10+i/100%10*10;
y=i/10%10+i/1000%10*10;
if(x<y && y%n==0 && y%2==0 && x%2==1 && x/10!=0 &&y/10!=0)
sum++;
}
printf("%d",sum);
return 0;
}
密码翻译
题目描述: 把某字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z,b改写成a,大写字母和其它字符保持不变,并输出翻译后的字符数组。 输入描述: 输入要翻译的密码字符串(长度小于100) 输出描述描述: 翻译后的字符串。 样式输入:
Adb Bcdza
样式输出:
Aca Bbcyz
源代码
#include<stdio.h>
#include<string.h>
int main()
{
int len,i;
char a[100];
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='a'&&a[i]<='z')
{
if(a[i]=='a')
a[i]='z';
else
a[i]--;
}
}
for(i=0;i<len;i++)
printf("%c",a[i]);
return 0;
}
身高预测
题目描述: 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) 0.54(cm) 女性成人时身高 = (faHeight 0.923 + moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。 编程从键盘输入你的性别(用字符型变量存储,输入字符f表示女性,输入字符m表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量存储,输入字符y表示喜爱,输入字符n表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。 输入描述: 从键盘输入性别、父母身高、是否喜爱体育锻炼、是否有良好的饮食习惯等条件。 输出描述描述: 身高(cm)。 样式输入:
f 165 155 y y
样式输出:
159.07
源代码
#include<stdio.h>
int main()
{
double a,b,c,k=1;
char ch1,ch2,ch3;
scanf("%c",&ch1);
scanf("%lf%lf",&a,&b);
getchar();
scanf("%c",&ch2);
getchar();
scanf("%c",&ch3);
if(ch1=='f')
{
c=(a*0.923+b)/2.0;
if(ch2=='y')
c*=1.02;
if(ch3=='y')
c*=1.015;
}
else
{
c=(a+b)*0.54*k;
if(ch2=='y')
c*=1.02;
if(ch3=='y')
c*=1.015;
}
printf("%.2lf",c);
return 0;
}
大奖赛现场统分
题目描述: 编写一个为某大奖赛现场统分的程序,在评委打分之后,及时通报评分结果。已知某大奖赛有n个选手参赛,m(m>2)个评委依次为参赛的选手评判打分,最高10分,最低0分。 统分规则为:在每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分后,取平均分为该选手的最后得分。 要求编程实现:根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单。 输入描述: 按以下顺序输入数据,数据之间用空格或回车间隔: 选手人数n(不超过40), 评委人数m(不超过20), 第1位选手的编号, m个评委的打分, 第2个选手的编号, m个评委的打分 第n位选手的编号, m个评委的打分。 输出描述描述: 分行打印每个选手的名次,编号,最后得分,选手得分保留一位小数。 样式输入:
5 5 11 9.5 9.6 9.7 9.4 9.0 12 9.0 9.2 9.1 9.3 8.9 13 9.6 9.7 9.5 9.8 9.4 14 8.9 8.8 8.7 9.0 8.6 15 9.0 9.1 8.8 8.9 9.2
样式输出:
1 13 9.6 2 11 9.5 3 12 9.1 4 15 9.0 5 14 8.8
源代码
#include<stdio.h>
int main()
{
int n,m,i=0,j,z,a[40];
int k1,k2;
double c[40]={0},b[40][20],f,min,max,temp;
scanf("%d",&n);
scanf("%d",&m);
z=n;
while(z)
{
scanf("%d",&a[i]);
for(j=0;j<m;j++)
scanf("%lf",&b[i][j]);
i++;
z--;
}
for(i=0;i<n;i++)
{
max=b[i][0];
min=b[i][0];
k1=0;
k2=0;
for(j=1;j<m;j++)
{
if(b[i][j]>max)
{
max=b[i][j];
k1=j;
}
if(b[i][j]<min)
{
min=b[i][j];
k2=j;
}
}
for(z=0;z<m;z++)
if(z!=k1 && z!=k2)
c[i]+=b[i][z];
f=m-2;
c[i]/=f;
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(c[i]<c[j])
{
temp=c[i];
c[i]=c[j];
c[j]=temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=0;i<n;i++)
printf("%d %d %.1lf\n",i+1,a[i],c[i]);
return 0;
}
礼炮声响次数
题目描述: 在庆祝活动中。A,B,C三条军舰要同时开始鸣礼炮各n(n为整数)响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请问观众总共可以听到几次礼炮声? 输入描述: 一个整数(n) 输出描述描述: 一个整数,即听到礼炮声的次数m。 样式输入:
21
样式输出:
54
源代码
#include<stdio.h>
int main()
{
int n,sum,i;
int a[21]={0},b[21]={0},c[21]={0};
scanf("%d",&n);
sum=3*n-2;
for(i=1;i<=5*(n-1);i++)
{
if(i%5==0&&i%6==0&&i%7==0)
sum-=2;
if((i%5==0&&i%6==0)||(i%5==0&&i%7==0)||(i%6==0&&i%7==0))
sum--;
}
for(i=5*(n-1)+1;i<=6*(n-1);i++)
if(i%6==0&&i%7==0)
sum--;
printf("%d",sum);
return 0;
}
产值翻番计算
题目描述: 假设当年工业产值为100,工业产值的增长率每年为c%,从键盘输入一个c(0<=c<=30),试求工业产值过多少年可实现翻番(即增加一倍)。 注:后一年的产值是在前一年的基础上增长c%。 输入描述: 一个0~30的实数(增长率)。 输出描述描述: 实现翻番的年数。 样式输入:
6
样式输出:
12
源代码
#include<stdio.h>
int main()
{
int c,yy=0;
float m=100,k;
scanf("%d",&c);
k=c/100.0;
while(m<200)
{
yy++;
m+=k*m;
}
printf("%d",yy);
return 0;
}
福利彩票(双色球)
题目描述: 现在买彩票成为一种发财致富的途径,当然中奖的机会还是比较少,特别是大奖。 其游戏规则如下: 彩民从1~33中选择六个随机的号码,作为红球号码,从1~16中选择一个号码作为篮球号码。这样一共有7个号码。 中奖规则是:与开奖号码相比, 一等奖,红色号码和蓝色号码必须完全一样; 二等奖,六个红色号码相同,但蓝色号码不同; 三等奖5个红色号码相同(不分先后顺序)和一个蓝色号码相同; 四等奖,5个红色号码相同并且蓝色号码不同 或者 4个红色号码相同并且蓝色号码相同; 五等奖 4个红色号码相同并且蓝色号码不同 或者 3个红色号码相同并且蓝色号码相同; 六等奖 蓝色号码必须相同,红色号码可以为0、1、2个。 其他的号码属于没中奖 输入描述: 输入第一行是7个整数,表示开奖号码,前面六个是红色球号码,最后一个是篮球号码,接下来的5行,每行包含合法的彩票号码(前面六个是红色球号码,最后一个是篮球号码),每个号码之间用空格隔开。 输出描述描述: 对于每一个彩票号码,在一行中 输出其相应的奖励等级,一等奖为1,二等奖为2,三等奖为3,四等奖为4,五等奖为5,六等奖为6,无奖为0。 样式输入:
23 1 8 9 28 16 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9 2 3 4 5 6 22 9
样式输出:
6 6 6 6 6
源代码
#include<stdio.h>
int main()
{
int a[7],b[7],i,sum=0;
for(i=0;i<7;i++)
scanf("%d",&a[i]);
while(scanf("%d %d %d %d %d %d %d",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6])!=EOF)
{
for(i=0;i<6;i++)
if(a[i]==b[i])
sum++;
if(sum==6&&a[6]==b[6])
printf("1\n");
else if(sum==6&&a[6]!=b[6])
printf("2\n");
else if(sum==5&&a[6]==b[6])
printf("3\n");
else if((sum==5&&a[6]!=b[6])||(sum==4&&a[6]==b[6]))
printf("4\n");
else if((sum==4&&a[6]!=b[6])||(sum==3&&a[6]==b[6]))
printf("5\n");
else if(a[6]==b[6])
printf("6\n");
else
printf("0\n");
sum=0;
}
return 0;
}
移动数列
题目描述: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。 输入描述: 输入总数n(0~20的整数),后移位数m(m<n),输入n个整数,间隔以空格。
输出描述: 移动后的数列。 样式输入:
8 3 1 2 3 4 5 6 7 8
样式输出:
6 7 8 1 2 3 4 5
源代码
#include <stdio.h>
int main()
{
int a[20],i,n,m,b[20],k=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=n-1;i>=n-m;i--)
{
b[k]=a[i];
k++;
}
for(i=n-1;i>=m;i--)
a[i]=a[i-m];
for(i=k-1;i>=0;i--)
printf("%d ",b[i]);
for(i=m;i<n-1;i++)
printf("%d ",a[i]);
printf("%d",a[n-1]);
return 0;
}
行李托运
题目描述: 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超过50公斤,超过部分每公斤按0.25元计费。请编程实现自动计费功能。 输入描述: 输入一个整数,表述要托运的行李的重量,单位为公斤 输出描述: 托运的行李重量(单位公斤)空格和运费(单位为元,保留2位小数)。 样式输入:
45
样式输出:
45 6.75
源代码
#include<stdio.h>
int main()
{
int n;
double sum=0;
scanf("%d",&n);
printf("%d ",n);
if(n<=50)
sum+=0.15*n;
else
sum+=0.15*50+0.25*(n-50);
printf("%.2lf",sum);
return 0;
}
分数比较
题目描述: 请编程实现比较两个分数的大小。(注:进行分数的通分后再比较分子的大小) 输入描述: 输入两个分数,格式为分子/分母 分子/分母,分子,分母均为整数。 输出描述描述: 输出比较后的结果。如果等于,则输出分子/分母=分子/分母;如果小于分子/分母<分子/分母;如果大于,则输出分子/分母>分子/分母 样式输入:
1/2 1/3
样式输出:
1/2>1/3
源代码
#include<stdio.h>
int main()
{
int a,b,c,d,x,y;
scanf("%d/%d %d/%d",&a,&b,&c,&d);
x=a*d;
y=b*c;
if(a<0 || c<0)
{
if(a>0 && c<0)
printf("%d/%d>%d/%d",a,b,c,d);
if(a<0 && c>0)
printf("%d/%d<%d/%d",a,b,c,d);
if(a<0 && c<0)
if(x>y)
printf("%d/%d<%d/%d",a,b,c,d);
else if(x==y)
printf("%d/%d=%d/%d",a,b,c,d);
else
printf("%d/%d>%d/%d",a,b,c,d);
}
else
if(x>y)
printf("%d/%d>%d/%d",a,b,c,d);
else if(x==y)
printf("%d/%d=%d/%d",a,b,c,d);
else
printf("%d/%d<%d/%d",a,b,c,d);
return 0;
}
求人数
题目描述: 定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人? 输入描述: 输入50个学生的成绩 输出描述描述: 输出一个整数表示高于平均成绩的人数
样式输入:
45 46 47 48 49 50 41 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
样式输出:
25
源代码
#include<stdio.h>
int avg(int a[50])
{
int i,sum=0;
double k=0;
for(i=0;i<50;i++)
k+=a[i];
k/=50.0;
for(i=0;i<50;i++)
if(a[i]>k)
sum++;
return sum;
}
int main()
{
int a[50],n,i;
for(i=0;i<50;i++)
scanf("%d",&a[i]);
n=avg(a);
printf("%d",n);
return 0;
}
e数列
题目描述: ┌ e(1)=e(2)=1, └ e(n)=(n-1)e(n-1)+(n-2)e(n-2) (n>2) 称为e数列, 每一个e(n) (n=1,2,…)称为e数。求[1,m]之内: (1)最大的e数。 (2)e数的数目 输入描述: 输入一个整数,表示m的值,m<300000; 输出描述描述: 输出两个整数,第一个表示最大的e数,第二个表示e数的数目; 样式输入:
30000
样式输出:
16687 8
源代码
#include<stdio.h>
int main()
{
int e[20]={1,1,1},m,j,i=2,max;
scanf("%d",&m);
while(e[i]<=300000)
{
i++;
e[i]=(i-1)*e[i-1]+(i-2)*e[i-2];
}
for(j=1;j<i;j++)
{
if(e[j]<=m)
max=e[j];
else
break;
}
printf("%d\n%d",max,j-1);
return 0;
}
运算符++前置后置练习(胡宁静)
题目描述: 程序部分代码如下,写出一个完整的程序,输出m,n的值。 int i=8,j=10,m,n; m=++i; n=j++; m=++j; n=i++; 输入描述: 无输入 输出描述描述: 输出m,n的值(不含回车,m n中间有一空格) 样式输入:
无
样式输出:
12 9
源代码
#include<stdio.h>
main()
{
int i=8,j=10,m,n;
m=++i;
n=j++;
m=++j;
n=i++;
printf("%d %d",m,n);
}
按格式要求显示日期
题目描述: 接收用户从键盘输入的日期信息并将其显示出来。其中,输入日期的形式为月/日/年(即mm/dd/yyyy),输出日期的形式为年月日(即yyyymmdd)。 输入描述: 以形式为“月/日/年”(即mm/dd/yyyy)的格式,输入一个日期。 输出描述描述: 以形式为年月日(即yyyymmdd)输出日期。
样式输入:
2/17/2010
样式输出:
20100217
源代码
#include<stdio.h>
main()
{
int y,m,d;
scanf("%d/%d/%d",&m,&d,&y);
printf("%d%02d%02d",y,m,d);
}
求圆的周长和面积
题目描述: 从键盘输入圆的半径,求该圆的周长和面积。(注: 取3.14) 输入描述: 一个实数r。 输出描述描述: 圆的周长和面积。 样式输入:
1
样式输出:
r=1.00,l=6.28,s=3.14
源代码
#include<stdio.h>
#define PI 3.14
main()
{
float r,l,s;
scanf("%f",&r);
printf("r=%.2f,l=%.2f,s=%.2f",r,2*PI*r,PI*r*r);
}
计算分段函数
题目描述: 计算分段函数 y=x (x<0) y=0 (x=0) y=sqrt(x) (x>0) 输入x,打印出y值。 输入描述: 一个实数x。 输出描述描述: x的值和分段函数y的值。 样式输入:
0
样式输出:
x=0.000000,y=0.000000
源代码
#include<stdio.h>
#include<math.h>
main()
{
double x,z;
scanf("%lf",&x);
if(x>0)
z=sqrt(x);
else if(x==0)
z=0;
else
z=x;
printf("x=%lf,y=%lf",x,z);
}
确定一个数的位数
题目描述: 编写程序用来确定一个数的位数。如: 输入: 567 输出:The number 567 has 3 digits 假设输入的数最多不超过四位。 输入描述: 一个整数n。 输出描述描述: 按指定格式输出这个数的位数。 样式输入:
567
样式输出:
The number 567 has 3 digits
源代码
#include<stdio.h>
main()
{
int n,digits=1,k;
scanf("%d",&n);
k=n;
if(n>9)
{
while(n/10>0)
{
digits++;
n/=10;
}
printf("The number %d has %d digits",k,digits);
}
else
printf("The number %d has 1 digit",k);
}
显示某个数的英文单词
题目描述: 用switch语句编写一个程序,要求用户输入一个两位的整数,显示这个数的英文单词。例如:输入45,显示forty-five。注意:对11~19要进行特殊处理。 输入描述: 一个两位的整数n。 输出描述描述: 这个数的英文单词。 样式输入:
45
样式输出:
forty-five
源代码
#include<stdio.h>
main()
{
int n,s,m;//s为十位数,m为个位数。
scanf("%d",&n);
switch(n)
{
case 10:printf("ten");break;
case 11:printf("eleven");break;
case 12:printf("twelve");break;
case 13:printf("thirteen");break;
case 14:printf("fourteen");break;
case 15:printf("fifteen");break;
case 16:printf("sixteen");break;
case 17:printf("seventeen");break;
case 18:printf("eighteen");break;
case 19:printf("nineteen");break;
}
s=n/10;
m=n%10;
if(s>1)
{
switch(s)
{
case 2:printf("twenty");break;
case 3:printf("thirty");break;
case 4:printf("fourty");break;
case 5:printf("fifty");break;
case 6:printf("sixty");break;
case 7:printf("seventy");break;
case 8:printf("eightty");break;
case 9:printf("ninety");break;
}
switch(m)
{
case 0:printf("");break;
case 1:printf("-one");break;
case 2:printf("-two");break;
case 3:printf("-three");break;
case 4:printf("-four");break;
case 5:printf("-five");break;
case 6:printf("-six");break;
case 7:printf("-seven");break;
case 8:printf("-eight");break;
case 9:printf("-nine");break;
}
}
}
找出最大数
题目描述: 用户从键盘输入若干个数,当输入0或负数时输出这些数中的最大非负数。注意,输入的数不要求一定是整数。 输入描述: 输入若干个数,最后一个为0或负数。 输出描述描述: 最大非负数。 样式输入:
2.3 6.3 5.4 0
样式输出:
max=6.300000
代码
#include<stdio.h>
main()
{
float max=0,n;
scanf("%f",&n);
while(n>0)
{
if(max<n)
max=n;
scanf("%f",&n);
if(n==0)
break;
}
printf("max=%f",max);
}
求最简分式
题目描述: 用户输入一个分数,要求将其约分,输出最简分式。例如:输入3/12,输出1/4。提示:为了把分式化简为最简分式,首先求分子和分母的最大公约数,然后分子和分母分别除以最大公约数。 输入描述: 一个分数。 输出描述描述: 最简分式。 样式输入:
3/12
样式输出:
最简分数为1/4
源代码
#include<stdio.h>
main()
{
int n,m,i;
scanf("%d/%d",&n,&m);
for(i=n;i>0;i--)
if(n%i==0 && m%i==0)
{
printf("最简分数为%d/%d",n/i,m/i);
break;
}
}
计算多项式的和
题目描述: 计算从2~n的自然数中偶数的和,即2+4+6+8+…的值。 注意:n可能是偶数,也可能是奇数。 输入描述: 一个整数n。 输出描述描述: 从2~n的自然数中偶数的和。 样式输入:
100
样式输出:
sum=2550
源代码
#include<stdio.h>
main()
{
int n,sum=0,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(i%2==0)
sum+=i;
printf("sum=%d",sum);
}
阶乘累加
题目描述: 计算1!+2!+3!……+n! 输入描述: 一个整数n(n<=20)。
输出描述描述: 1到n的阶乘累加之和。 样式输入:
5
样式输出:
s=153
源代码
#include<stdio.h>
main()
{
int n,s=0,m,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1,m=1;j<=i;j++)
m*=j;
s+=m;
}
printf("s=%d",s);
}
计算e的近似值
题目描述: 利用泰勒级数 e=1+1/1!+1/2!+……+1/n!, 计算e的近似值。精度要求最后一项的绝对值小于f(如:f=1e-5)。 输入描述: 精度。 输出描述描述: e的近似值,保留6位小数。 样式输入:
1e-5
样式输出:
e=2.718282
源代码
#include<stdio.h>
main()
{
int n,m=1,i,k;
float e=1,s;
scanf("%f",&s);
for(n=1;;n++)
{
for(i=1,k=1;i<=n;i++)
k*=i;
m=k;
e+=1.0/m;
if(1.0/m<s)
break;
}
printf("e=%f",e);
}
计算sinx的值
题目描述: 利用泰勒级数 sinx=x-x^3/3!+x^5/5!-x^7/7!+…… 计算sinx的值。要求最后一项的绝对值小于1e-5,并统计出此时累加的项数。 输入描述: 一个实数x(一个角度的弧度数) 输出描述描述: sinx的值和累加的项数。 样式输入:
1.57
样式输出:
sinx=1.000000,n=6
源代码
#include<stdio.h>
#include<math.h>
void main()
{
int n=1,s=3,j,m=1;
double sinx,x,z,i=3;
scanf("%lf",&x);
sinx=x;
do
{
for(j=1,m=1;j<=s;j++)
m*=j;
z=(pow(-1,n)*pow(x,i))/m;
sinx+=z;
n++;
i+=2;
s+=2;
}while(fabs(z)>=1e-5);
printf("sinx=%lf,n=%d",sinx,n);
}
题目描述: 打印n(三位的整数)以内的所有水仙花数。所谓水仙花数是指一个三位的整数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=1^3+5^3+3^3。 输入描述: 一个整数n。 输出描述描述: 符合条件的水仙花数。 样式输入:
400
样式输出:
153 370 371
源代码
#include<stdio.h>
main()
{
int n,i,j,k,r;
scanf("%d",&n);
for(i=100;i<=n;i++)
{
j=i%10;
k=(i%100)/10;
r=i/100;
if(i==j*j*j+k*k*k+r*r*r)
printf("%d\n",i);
}
}
打印ASCII码值、字符对照表
题目描述: 打印码值为n1~n2( n1和n2的值在33~127范围内)的ASCII码值、字符对照表。 输入描述: 两个整数n1和n2(值在33~127范围内)。 输出描述描述: 对照表。要求:ASCII码值占7列,字符占9列,向右对齐,每行打3个码值。 样式输入:
65 70
样式输出: 65 A 66 B 67 C 68 D 69 E 70 F 源代码
#include<stdio.h>
void main()
{
int n1,n2,i,j;
scanf("%d",&n1);
scanf("%d",&n2);
for(i=n1,j=1;i<=n2;i++,j++)
{
printf("%7d%9c",i,i);
if(j%3==0)
printf("\n");
}
}
第n年时有多少头母牛?
题目描述: 递增的牛群:若一头小母牛,从第4年开始每年生一头小母牛。按此规律,第n年时有多少头母牛? 输入描述: 一 个整数n(n>=4 && n<=20)。 输出描述描述: 第n年时的母牛数。 样式输入:
4
样式输出:
2
源代码
#include<stdio.h>
void main()
{
int n,f,f1,f2,f3,i;
scanf("%d",&n);
for(i=4,f1=f2=f3=1;i<=n;i++)
{
f=f1+f3;
f3=f2;
f2=f1;
f1=f;
}
printf("%d",f);
}
百马百担问题
题目描述: 百马百担问题:有n1匹马,驮n2担货,大马驮3担,中马驮2担,两匹小马驮1担,问有多少种驮法? 注意:每种马至少有1匹. 输入描述: 两个整数n1(马匹数)和n2(担货数)。 输出描述描述: 驮法数。 样式输入:
100 100
样式输出:
6
源代码
#include<stdio.h>
main()
{
int n1,n2,sum=0,x,y,z;//x,y,z分别为大马匹数,中马匹数和小马匹数。
scanf("%d %d",&n1,&n2);
for(x=1;x<=n1;x++)
{
for(y=1;y<=n1-x;y++)
{
z=n1-x-y;
if((3*x+2*y+0.5*z)==n2)
sum++;
}
}
printf("%d",sum);
}
求可行的购鱼方案
题目描述: 有钱m元,要买金鱼n条。市场上的金鱼主要有三个品种,价格分别为:红狮头每条0.9元,黑骑士每条1.2元,白金刚每条1.6元。如果每一个品种都至少购买一条,要买足n条金鱼,且正好用完n元。试编写程序求出可行的购鱼方案。 输入描述: 两个整数m(钱数)和n(金鱼总数)。 输出描述描述: 购鱼方案。注:一种方案打一行,按红狮头、黑骑士、白金刚的顺序打出条数,数据之间留一个空格。 样式输入:
30 25
样式输出:
4 18 3 8 11 6 12 4 9
源代码
#include<stdio.h>
void main()
{
int n,m,i,j;
double k;
scanf("%d%d",&m,&n);
for(i=1;i<=m/1.6;i++)
{
for(j=1;j<=(m-1.6*i)/1.2;j++)
{
k=1.6*i+1.2*j+0.9*(n-i-j);
if(k==m)
printf("%d %d %d\n",n-i-j,j,i);
}
}
}
最低位(二进制的转换)
题目描述: 任意一个正整数A(1<=A<=109),输出它的最低位。例如,A=26,我们能写出它的二进制位11010,所以最低位是10,输出为2。例如,A=88,则二进制位1011000,则最低位是1000,输出为8。再例如A=7,则二进制位111,则最低位是1,输出为1。 输入描述: 输入包含一个整数A(1<=A<=109) 输出描述描述: 对应输入的最低位(输出不包含回车) 样式输入:
8
样式输出:
8
源代码
#include<stdio.h>
#include<math.h>
#define N 10
main()
{
int A,law,a[N],i,j;
scanf("%d",&A);
for(i=0;i<=N;i++)
{
a[i]=A%2;
A/=2;
if(a[i]==1)
break;
}
law=pow(2,i);
printf("%d",law);
}
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,接着的1行,输入T个数据,每一个数据包含一个数n(0<=n<=45 ),即你需要计算的F(n) 输出描述描述: 对每输入的数n,输出对应的F(n),每个F(n)之间包含一个空格,最后一行输出不含回车。
样式输入:
5 0 3 5 9 20
样式输出:
0 2 5 34 6765
源代码
#include<stdio.h>
int main()
{
int n,i,k;
int b[46]={0,1},a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=2;i<=45;i++)
{
b[i]=b[i-1]+b[i-2];
}
for(i=0;i<n-1;i++)
{
k=a[i];
printf("%d ",b[k]);
}
k=a[n-1];
printf("%d",b[k]);
return 0;
}
源代码
#include<stdio.h>
int main()
{
int n,i,k;
int b[46]={0,1},a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=2;i<=45;i++)
{
b[i]=b[i-1]+b[i-2];
}
for(i=0;i<n-1;i++)
{
k=a[i];
printf("%d ",b[k]);
}
k=a[n-1];
printf("%d",b[k]);
return 0;
}
蛇形矩阵1—一个方向生成(胡宁静) 题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:
5
样式输出:
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
源代码
#include<stdio.h>
int main()
{
int n,a[20]={1},i,j;
int N,k,z,s;
scanf("%d",&N);
n=N;
for(i=0,z=1;i<N-1;i++)
{
s=i+2;
for(j=1;j<n;j++)
{
a[j]=a[j-1]+s;
s++;
}
for(k=0;k<n-1;k++)
printf("%d ",a[k]);
printf("%d\n",a[n-1]);
a[0]+=z;
z++;
n--;
}
printf("%d",a[0]);
return 0;
}
蛇形矩阵2—双向生成
题目描述: 蛇形矩阵是从1开始的自然数依次排列成的一个矩阵上三角形。注意看样式输出。 输入描述: 矩阵的大小N(N<20) 输出描述描述: 输出一个蛇形矩阵,注意:每行行末没有空格,最后一行没有换行。 样式输入:
5
样式输出:
1 3 4 10 11 2 5 9 12 6 8 13 7 14 15
源代码
#include<stdio.h>
int main()
{
int n,a[20][20]={1},i,j;
int N,k,z,s,f;
int temp;
scanf("%d",&N);
n=N;
for(i=0,z=1;i<N;)
{
s=i+2;
for(j=1;j<n;j++)
{
a[i][j]=a[i][j-1]+s;
s++;
}
i++;
a[i][0]=a[i-1][0]+z;
z++;
n--;
}
n=N;
for(i=2;i<N;i+=2)
{
f=i;
for(k=0,j=0;k<=i/2;k++)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
i--;
j++;
}
i=f;
}
for(i=0;i<N-1;i++)
{
for(k=0;k<n-1;k++)
printf("%d ",a[i][k]);
printf("%d\n",a[i][n-1]);
n--;
}
printf("%d",a[N-1][0]);
return 0;
}
猪的安家
题目描述: 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 输出描述描述: 输出包含一个正整数,即为Andy家至少养猪的数目 样式输入:
3 3 1 5 1 7 2
样式输出:
16
源代码
#include<stdio.h>
int main()
{
int n,ai,bi;
int i,j,k,a[1000],s=1000;
scanf("%d",&n);
for(i=0;i<1000;i++)
a[i]=i+1;
for(i=0;i<n;i++)
{
scanf("%d %d",&ai,&bi);
k=0;
for(j=0;j<s;j++)
if(a[j]%ai==bi)
{
a[k]=a[j];
k++;
}
s=k;
}
if(k!=0)
printf("%d",a[0]);
return 0;
}
最大乘积的整数的拆分
题目描述: 将一个整数N分解成各不相同的加数的和,使这些加数的乘积最大。N范围为[5,1000] 提示:从乘积最大的原则出发:多拆3,少拆2,不拆1,1对乘法没有贡献。如6拆为3+3>3+2+1;4拆分为2+2>3+1,因此,拆分的最大数为3. 输入描述: 输入一个整数N(5<=N<=1000) 输出描述描述: 能够使得积最大的加数序列,序列按拆分数由小到大的顺序排列,每个数字之间有一个空格,最后一个数字没有空格。 样式输入:
7
样式输出:
2 2 3
源代码1
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%3==1)
{
printf("2 2");
n-=4;
while(n)
{
printf(" 3");
n-=3;
}
//printf("4");
}
else if(n%3==2)
{
printf("2");
n-=2;
while(n)
{
printf(" 3");
n-=3;
}
}
else
{
printf("3");
n-=3;
while(n)
{
printf(" 3");
n-=3;
}
}
return 0;
}
源代码
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
if(n%3==1)//余数为一的最后拆成2和2,其余拆成3.
{
printf("2 2");
while(n!=4)
{
n-=3;
printf(" 3");
}
}
else if(n%3==2)//余数为二的拆一个2,其余为3.
{
printf("2");
while(n!=2)
{
n-=3;
printf(" 3");
}
}
else//为0的均为3.
{
while(n!=3)
{
n-=3;
printf("3 ");
}
printf("3");
}
return 0;
}
插队—数的插入
题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素按原来的排序规则将它插入到数组中。 例如原数组为:1 2 6 7 9,输入待插入的元素3,则插入完成后结果为:1 2 3 6 7 9; 输入描述: 输入包含两部分,第一部分先输入n(2<n<=100),表示数组中元素个数,接着输入n个已经排序好的数,第二部分为待插入的数据 输出描述描述: 新的排序好的数组元素,数组元素之间用一个空格分隔,最后一个元素后不要空格。 样式输入:
5 1 2 6 7 9 3
样式输出:
1 2 3 6 7 9
源代码
#include<stdio.h>
int main()
{
int a[101],n,i,j;
int s,temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&s);
for(i=0;i<n;i++)
{
if(a[i]>s)
{
for(j=n;j>i;j--)
a[j]=a[j-1];
a[i]=s;
break;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);
return 0;
}
卫星定位—数的查找
题目描述: 编写程序,对一个已经排好序的数组,输入一个元素。将该元素在数组中的位置索引出来(折半查找)。 例如原数组为:1 2 6 7 9,输入待查找的元素7,则查找结果为4,如果没有找到该元素,则输出数值-1;
输入描述: 输入包含两部分,第一部分先输入n,表示数组中元素数,接着输入n个已经排序好的数,数组最大个数n为20,第二部分为待查找的数据 输出描述描述: 待查找的元素位置 样式输入:
5 1 2 6 7 9 7
样式输出:
4
[源代码
#include<stdio.h>
int main()
{
int n,k,a[20];
int i,low,top,mid,loc=-1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&k);
low=0;
top=n-1;
while(low<top)
{
mid=(low+top)/2;
if(a[mid]>k)
top=mid-1;
else if(a[mid]<k)
low=mid;
else
{
loc=mid+1;
break;
}
}
printf("%d",loc);
return 0;
}
警察抓贼—数的删除
题目描述: 编写程序,将n(n<1000)个元素中的某个特定元素删除。如果该元素出现的次数t为奇数次,则删除第(t+1)/2那个,如果出现的次数t为偶数次,则删除第(t/2)个 输入描述: 输入包含两部分,第一部分先输入n,接着输入n个原数据。第二部分为待删除的元素; 输出描述描述: 删除特定元素后的剩余元素,如果没有元素被删除,则原样输出;元素之间用一个空格分隔,最后一个元素没有回车。 样式输入:
8 1 3 4 6 3 5 3 6 3
样式输出:
1 3 4 6 5 3 6
源代码
#include<stdio.h>
int main()
{
int n,a[1000];
int s,i,t=0,m,j=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&s);
for(i=0;i<n;i++)
if(a[i]==s)
t++;
if(t%2!=0)
m=(t+1)/2;
else
m=t/2;
for(i=0;i<n-1;i++)
{
if(a[i]!=s)
printf("%d ",a[i]);
else
{
j++;
if(j!=m)
printf("%d ",a[i]);
}
}
if(a[n-1]!=s)
printf("%d",a[n-1]);
else
{
j++;
if(j!=m)
printf("%d",a[n-1]);
}
return 0;
}
是非黑白—字符串比较
题目描述: 编写函数实现两个等长字符串大小比较(两字符串长度<81)。比较规则如下:字符大小按对应的ASCII 码值,字符串大小比较时按对应字符比较,如果比较的两字符不等,则说明存在大小关系,停止比较操作。如果相等,则比较下一次字符,直到最后一个。如果第一个字符串小于第二个字符串则输出第二个字符串,如果大于则输出第一个字符串(字符串输出含回车),如果相等则返回数值0(不含回车);要求不使用cmpstr()函数完成; 输入描述: 输入待比较的两个字符串 输出描述描述: 字符串比较结果 样式输入:
abcdefg abcdeff
样式输出:
abcdefg
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[81],b[81];
int i,len1,len2,max,s1=0,s2=0;
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
max=(len1>len2)?len1:len2;
for(i=0;i<len2;i++)
{
if(a[i]<b[i])
{
s2++;
break;
}
if(a[i]>b[i])
{
s1++;
break;
}
}
if(s1==1)
puts(a);
if(s2==1)
puts(b);
if(s1==0 && s2==0)
{
if(len1>len2)
puts(a);
else if(len1<len2)
puts(b);
else
printf("0");
}
return 0;
}
搭桥—字符串连接
题目描述: 编写函数将两个升序排列的字符串(串长<81)融合成一个字符串,融合后的字符串仍然是升序排列的。
输入描述: 输入两升序字符串 输出描述: 融合后的字符串 (含回车符) 样式输入:
acefi bdfg
样式输出:
abcdeffgi
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[162],b[81];
int i,j,len,temp;
scanf("%s",a);
scanf("%s",b);
strcat(a,b);
len=strlen(a);
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
puts(a);
return 0;
}
一清二楚—字符串统计
题目描述: 输入一字符串,该字符串包含字母、数字和其他字符。统计该字符串中数字、字母和其他字符出现的频率。(注意,其他字符包含空格) 输入描述: 一混合字符串,最大长度为200 输出描述描述: 各类字符出现频率,最后一行不含回车。 样式输入:
abcdefg9999////
样式输出:
ch:7 num:4 other:4
源代码
#include<stdio.h>
#include<string.h>
main()
{
1: char a[201];
int ch=0,num=0,other=0,i,k;
gets(a);
k=strlen(a);
for(i=0;i<k;i++)
{
if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
ch++;
else if(a[i]>='0'&&a[i]<='9')
num++;
else
other++;
}
printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
}
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[200];
int ch=0,num=0,other=0,len,i;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='0' && a[i]<='9')
num++;
else if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z'))
ch++;
else
other++;
}
printf("ch:%d\nnum:%d\nother:%d",ch,num,other);
return 0;
}
克隆—字符串的拷贝(胡宁静)
题目描述: 编写程序实现字符串拷贝,输入两字符串(字符串长度小于100),将第一个字符串拷贝到第二个字符串中;如果第一个字符串的长度a小于第二个字符串长度b,则第二个字符串的长度也将缩减至第一个的长度a,如果第一个字符串的长度a大于或等于第二个长度b,则只将a的前b个字符拷贝到第二个中; 输入描述: 输入两字符串 输出描述描述: 输出第二个字符串,注意:输出含回车。 样式输入:
Abdfeg Bdfad
样式输出:
Abdfe
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
int len1,len2,i;
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
if(len1<len2)
{
for(i=0;i<len1;i++)
b[i]=a[i];
b[len1]='\0';
}
else
{
for(i=0;i<len2;i++)
b[i]=a[i];
}
puts(b);
return 0;
}
2:源代码
#include<stdio.h>
#include<string.h>
int main()
{
int len1,len2,i;
char a[100],b[100];
gets(a);
gets(b);
len1=strlen(a);
len2=strlen(b);
if(len1<len2)
for(i=0;i<len1;i++)
printf("%c",a[i]);
else
{
for(i=0;i<len2;i++)
printf("%c",a[i]);
}
return 0;
}
字母转换
题目描述: 输入一个字符串(长度<100),将其中所有大写字母改为小写字母,而所有小写字母全部改为大写字母,其余字符原样输出然后输出前n个字符。 设计步骤 ①输入字符串; ②用循环判断字符串中的每个字符是大写还是小写,若是大写要转换成小写,是小写要转换成大写:大写与小写字母的转换关系是“小写字母=大写字母+32” ③用printf输出该字符串前n个字符。 输入描述: 输入数据为1个数字,表示输出字符窜长度(n<100),接着输入1个字符串,其长度不限,可包含键盘上可见的所有字符 输出描述描述: 输出为1个字符串,根据输入数据,将其中的大写字符转换成小写,小写转换成大写,其余字符不变 样式输入:
5 FG56hj
样式输出:
fg56H
源代码
#include<stdio.h>
int main()
{
int n,i;
char a[100];
scanf("%d",&n);
getchar();
gets(a);
for(i=0;i<n;i++)
{
if(a[i]<='z' && a[i]>='a')
printf("%c",a[i]-32);
else if(a[i]<='Z' && a[i]>='A')
printf("%c",a[i]+32);
else
printf("%c",a[i]);
}
return 0;
}
数字转换
题目描述: 输入一个数字,大小<100000,将其中每位数字进行转换后输出,规则如下: 数字0与9互换、1与8互换、2与7互换、3与6互换、4与5互换。 注意:要考虑首位数字为9时的转换结果。 输入描述: 输入数据为1个数字,大小<100000 输出描述描述: 输出为1个根据转换规则转换完成后的数字 样式输入:
56789
样式输出:
43210
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[6];
int i,len;
scanf("%s",a);
len=strlen(a);
if(a[0]!='9')
{
if(a[0]=='1')
printf("8");
if(a[0]=='2')
printf("7");
if(a[0]=='3')
printf("6");
if(a[0]=='4')
printf("5");
if(a[0]=='5')
printf("4");
if(a[0]=='6')
printf("3");
if(a[0]=='7')
printf("2");
if(a[0]=='8')
printf("1");
}
for(i=1;i<len;i++)
{
if(a[i]=='0')
printf("9");
if(a[i]=='1')
printf("8");
if(a[i]=='2')
printf("7");
if(a[i]=='3')
printf("6");
if(a[i]=='4')
printf("5");
if(a[i]=='5')
printf("4");
if(a[i]=='6')
printf("3");
if(a[i]=='7')
printf("2");
if(a[i]=='8')
printf("1");
if(a[i]=='9')
printf("0");
}
return 0;
}
函数求解1/n的累乘
题目描述: 利用自定义函数编写程序,求下面的式子: Y=11/21/3……*1/n (n的数值由键盘输入,n<=10)
输入描述: 输入一个正整数
输出描述描述: 输出为小数,保留小数点后12位有效数字。 样式输入:
3
样式输出:
0.166666666667
源代码
#include<stdio.h>
int main()
{
int n,i;
double s,y=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=i;
y*=1/s;
}
printf("%.12lf",y);
return 0;
}
函数求解1/n的累减(谌海军)
题目描述: 利用自定义函数编写程序,求下面的式子: Y=1-1/2-1/3……-1/n (n的数值由键盘输入,n<=100) 输入描述: 输入一个正整数 输出描述描述: 输出为小数,保留小数点后8位有效数字。 样式输入:
8
样式输出:
-0.71785714
源代码
#include<stdio.h>
int main()
{
int n,i;
double s,y=1;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
s=i;
y-=1/s;
}
printf("%.8lf",y);
return 0;
}
换汽水
题目描述: 1块钱1瓶汽水,3个空汽水瓶换1瓶汽水。n块钱能喝几瓶汽水? 输入描述: 输入为一个正整数n(1<=n<=100),表示钱数。 输出描述描述: 输出为一个正整数,表示可喝汽水的瓶数。 样式输入:
10
样式输出:
15
源代码
#include<stdio.h>
int main()
{
int n,sum,s;
scanf("%d",&n);
sum=n;
while(n)
{
if(n==2)
{
sum+=1;
break;
}
if(n<2)
break;
s=n/3;
sum+=s;
n=n%3+s;
}
printf("%d",sum);
return 0;
}
聪明的顾客
题目描述: 1瓶汽水卖1块钱,顾客还可以用3个空汽水瓶换1瓶汽水喝。请问聪明的顾客最少可以花多少钱买到n瓶汽水喝? 说明:当顾客手中有两个空汽水瓶的时候,如果店家剩余1瓶以上,可以选择先借用1瓶汽水,喝完后连同手里先前已有的两个空汽水瓶还给店家即可。 输入描述: 输入为一个正整数n(1<=n<=100),表示可卖汽水瓶数。 输出描述描述: 输出为一个正整数,表示所花钱数。 样式输入:
10
样式输出:
7
源代码
#include<stdio.h>
int main()
{
int n,sum,s,i,k,a[70]={0,1};
scanf("%d",&n);
for(i=2;i<70;i++)
{
k=i;
sum=i;
while(i)
{
if(i==2)
{
sum+=1;
break;
}
if(i<2)
break;
s=i/3;
sum+=s;
i=i%3+s;
}
i=k;
a[i]=sum;
}
for(i=0;i<70;i++)
if(a[i]==n)
{
printf("%d",i);
break;
}
return 0;
}
字符串起始位置
题目描述: 有字符串a(长度<=100),b(长度<=10),计算b串在a串中首次出现的位置。 输入描述: 输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10; 输出描述描述: 若b串在a串中出现,输出为一个正整数,表示b串在a串中首次出现的位置,若b串未出现在a串中,则输出0; 样式输入:
abcdefghijklmnababcdeabc abc
样式输出:
1
源代码
#include<stdio.h>
#include<string.h>
int main()
{
int len1,len2,i,j,sum=0,n=0,k;
char a[100],b[10];
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1;i++)
{
k=i;//用来恢复i的值。
for(j=0;j<len2;j++)
{
if(a[i]==b[j])
sum++;//如果相等则加一。
else break;
i++;//i要同时加,保持对应比较。
}
i=k;
if(sum==len2)
{
printf("%d",i+1);
n++;//用来记录是否有位置存在。
break;//有一个位置存在则跳出。
}
sum=0;
}
if(n==0)
printf("0");
return 0;
}
字符串清理
题目描述: 假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串尾部的号全部删除,前面和中间的号不删除。 *输入描述: 输入为一个字符串,字符串长度小于100;
输出描述描述: 输出为清理后的字符串;
样式输入:
ABCDEFG
样式输出:
**ABCDEFG
源代码
#include<stdio.h>
#include<string.h>
fun(char a[])
{
int len,i,s;
len=strlen(a);
for(i=len-1;i>=0;i--)
if(a[i]!='*')
{
a[i+1]='\0';
break;
}
}
int main()
{
char a[100];
int i,len;
scanf("%s",a);
fun(a);
len=strlen(a);
for(i=0;i<len;i++)
printf("%c",a[i]);
return 0;
}
围圈报数游戏
题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子,此时报数顺序调转,如:11个人围成1圈,从1报到4时,原来4号位的人退出,此时调转顺序报数,原来3号位的人报数1,原来2号位的人报数2,原来1号位的人报数1,原来11号位的人报数4,此时11号位的人退出游戏,再次逆转顺序报数,以此类推,问最后留下的是原来第几号的那位? 输入描述: 输入为两个正整数,第一个<=100,第二个<=9; 输出描述: 输出为一个正整数; 样式输入:
11 4
样式输出:
3
源代码
#include<stdio.h>
int main()
{
int n,m,i,j,k1=0,k2=0,z1,sum1,sum2,a[101];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
a[i]=1;
sum1=n;
z1=1;
sum2=0;
while(sum1!=1)
{
for(i=z1;i<=n;i++)
{
if(a[i]!=0)
{
k1++;
if(k1==m)
{
a[i]=0;
sum1--;
if(sum1==1)
break;
while(sum2==0)
{
for(j=i-1;j>0;j--)
if(a[j]!=0)
{
k2++;
if(k2==m)
{
a[j]=0;
sum2++;
sum1--;
k2=0;
break;
}
}
i=n+1;
}
z1=j;
k1=0;
sum2=0;
}
}
}
z1=1;
}
for(i=1;i<=n;i++)
if(a[i]!=0)
printf("%d",i);
return 0;
}
报数游戏
题目描述: 有n(n<=100)围成一圈,顺序排号(从1排到n)。从第一个人开始报数(从1一直往上报数),凡报到m及m的倍数或者尾数为m的人退出圈子,问最后留下的是原来第几号的那位? 输入描述: 输入为两个正整数,第一个<=100,第二个<=9; 输出描述: 输出为一个正整数; 样式输入:
10 3
样式输出:
5
源代码
#include<stdio.h>
int main()
{
int n,m,i,sum,a[101],k=0;
scanf("%d%d",&n,&m);
sum=n;
for(i=1;i<=n;i++)
a[i]=1;
while(sum!=1)
for(i=1;i<=n;i++)
if(a[i]!=0)
{
k++;
if(k%m==0)
{
a[i]=0;
sum--;
}
}
for(i=1;i<=n;i++)
if(a[i]!=0)
printf("%d",i);
return 0;
}
整数各位取偶数
题目描述: 将一个整数中的每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 (知识点:控制语句、函数、指针) 输入描述: 输入数据为一个不大于100000000的整形数; 输出描述描述: 输出数据为一个不大于100000000的整形数; 样式输入:
987654321
样式输出:
8642
源代码
#include<stdio.h>
int main()
{
int s,i,k=0;
int a[100];
scanf("%d",&s);
while(s)
{
if((s%10)%2==0)
a[k++]=s%10;
s/=10;
}
for(i=k-1;i>=0;i--)
printf("%d",a[i]);
return 0;
}
五位反序数
题目描述: 设N是一个五位数,它的n倍恰好是其反序数(例如:123的反序数是321), 编程,输出一个满足条件的N。(知识点:控制语句) 输入描述: 输入为一个整形数n(2<=n<=9) 输出描述描述: 输出为一个五位数的整形数 样式输入:
9
样式输出:
10989
源代码
#include<stdio.h>
int fan(int n)
{
int law=0,b;
while(n>0)
{
b=n%10;
law=law*10+b;
n/=10;
}
return law;
}
void main()
{
int n,N;
scanf("%d",&n);
for(N=10000;N<100000;N++)
if(N*n==fan(N))
{
printf("%d",N);
break;
}
}
复制字符串
题目描述: 有一个字符串,包括n个字符。写一个函数,将此字符串从第a个字符开始的b个字符复制成另一个字符串。 要求在主函数输入字符串及a,b的值并输出复制结果。 (知识点:控制语句、字符串、指针)
输入描述:输入为一个字符串(长度小于80)及两个整形数(a+b小于字符串的实际长度) 输出描述: 输出为一个字符串 样式输入:
abcdefghijklmnopqrst 8 5
样式输出:
hijkl
源代码
#include<stdio.h>
#include<string.h>
void main()
{
char a[80],b[80]={0};
int i,x,y,j;
gets(a);
scanf("%d %d",&x,&y);
for(i=x-1,j=1;j<=y;j++,i++)
b[j-1]=a[i];
puts(b);
}
增加的兔子
题目描述: 古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问一年之内每个月的兔子总数为多少? 输入描述: 无 输出描述描述: 输出一年之中每个月的兔子总数。 样式输入:
无
样式输出:
1 1 2 3 5 8 13 21 34 55 89 144
源代码
#include<stdio.h>
int main()
{
int a[12]={1,1},i;
for(i=2;i<12;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<11;i++)
printf("%d ",a[i]);
printf("%d",a[11]);
return 0;
}
整数的分解
题目描述: 将一个正整数分解质因数。例如:输入90,打印出90=2335。 输入描述: 输入一个正整数。 *输出描述描述: 等式左边输出整数,等式右边整数相乘形式。
样式输入:
90
样式输出:
90=2x3x3x5
源代码
#include<stdio.h>
int main()
{
int a[50],i=2,j,n,sum=0,k=0,b[50]={0},z;
while(k!=50)
{
for(j=1;j<=i;j++)
if(i%j==0)
sum++;
if(sum==2)
{
a[k]=i;
k++;
}
sum=0;
i++;
}
scanf("%d",&n);
k=0;
z=n;
while(n!=1)
{
for(i=0;i<50;i++)
if(n%a[i]==0)
{
n=n/a[i];
b[k]=a[i];
k++;
break;
}
}
printf("%d=",z);
for(i=0;i<k-1;i++)
printf("%d*",b[i]);
printf("%d",b[k-1]);
return 0;
}
小球自由落体问题
题目描述: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 输入描述: 无 输出描述描述: 小球在第10次落地时经过的路程数sn和第10次反弹的高度hn。 样式输入:
无
样式输出:
the total of road is 299.609375 the tenth is 0.097656 meter
源代码
#include<stdio.h>
int main()
{
int i;
double sn,a[11]={100};
sn=100;
for(i=2;i<=10;i++)
{
a[i-1]=a[i-2]/2.0;
sn+=2*a[i-1];
}
a[10]=a[9]/2.0;
printf("the total of road is %lf\n",sn);
printf("the tenth is %lf meter",a[10]);
return 0;
}
统计字符
题目描述:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 输入描述: 输入包含英文字母、空格、数字和其他字符的字符串 输出描述: 输出英文字母,空格,数字和其他字符的个数 样式输入:
avc i2g3 &*#4
样式输出:
5,2,3,3 源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
int len,i,s1=0,s2=0,s3=0,s4=0;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
s1++;
else if(a[i]==' ')
s2++;
else if(a[i]<='9' && a[i]>='0')
s3++;
else
s4++;
}
printf("%d,%d,%d,%d",s1,s2,s3,s4);
return 0;
}
数a求和 题目描述: 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制输入。 输入描述: 输入基数a和需要相加的个数n 输出描述描述: 输出相加的结果,注意结果最后不需要回车换行。 样式输入: 2 5
样式输出:
24690
源代码
#include <stdio.h>
int main()
{
int i,j,n,a,s,z,w;
scanf("%d%d",&a,&n);
for(s=0,i=1;i<=n;i++)
{
for(j=1,w=1,z=0;j<=i;j++)
{
z+=a*w;
w*=10;
}
s+=z;
}
printf("%d",s);
return 0;
}
统计单词个数
题目描述: 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。例如,输入:I am a boy,里面包含了四个英文单词。 输入描述: 利用gets输入字符。 输出描述描述: 输出单词个数,程序最后不需要回车换行。 样式输入:
I am a boy
样式输出:
There are 4 words in the line
源代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
int len,i,b[26]={0},sum=1;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]==' ')
sum++;
}
printf("There are %d words in the line",sum);
return 0;
}
三角形求最大和的问题
题目描述: 如图所示是一个由数字组成的三角形,编写程序按照某条路线遍历从第一行的首数字到最后一行的某个数,使每一行经过的数字相加的和为最大值,每一次跳转可以向左下方或者右下方进行。例如样图中第一行为7,选择左下方的数字3的话,继续选择左下方的数字8,第四行选择右下方的7,最后到达左下方的数字5。这样,7+3+8+7+5=30为最大。
7
3 8
8 1 0
2 7 4 4 4 5 2 6 5 输入描述: 先由键盘输入三角形的行数N(1<N<=100),接下来输入每行的数字,数字取值范围为0~99。 输出描述描述: 输出计算出的数字相加和的最大值。 样式输入:
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
样式输出:
30
源代码
#include<stdio.h>
int main()
{
int a[100][100],i,j,n,max=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
scanf("%d",&a[i][j]);
a[1][0]+=a[0][0];
a[1][1]+=a[0][0];
for(i=2;i<n;i++)
{
a[i][0]+=a[i-1][0];
for(j=1;j<i;j++)
a[i][j]+=(a[i-1][j-1]>a[i-1][j])?a[i-1][j-1]:a[i-1][j];
a[i][j]+=a[i-1][j-1];
}
for(i=0;i<n;i++)
if(a[n-1][i]>max)
max=a[n-1][i];
printf("%d",max);
return 0;
}
节约字节
题目描述: John在做一个项目,项目对存储容量有着近乎苛刻的要求,为此John需要对一些东西进行压缩存储。John的第一个问题就是一大堆的字符串,存储它们太占地方了,为此他想了一个办法:如果字符串具有相同的后缀,那么就把这么字符串的相同后缀和在一起,这样就能节约一点空间了。比如说有三个字符串分别为”john”、”ajohn”和”bjohn”,这样它们有相同的后缀”john”,这时候只需存储一个后缀”john”,节省了8个字母的存储空间。请编写程序计算对于不同的字符串能节省的存储空间? 输入描述: 第一行是一个整数k,表示可以输入多少个测试用例.每个测试用例占n+1行即每个测试用例的第一行为一个整数n(1<=n<=20),从第二行开始依次为n个字符串,字符串由英文字母组成,大小写敏感。 输出描述 一个测试用例输出完毕之后,换行输出这个测试用例节省了多少存储空间。 样式输入:
1 3 john ajohn bjohn
样式输出:
save 8 characters
源代码
#include<stdio.h>
#include<string.h>
int main()
{
int a[20]={0},i,n,k,j,z,m,t,len[20],min;
char s[20][100];
scanf("%d",&k);
while(k)
{
i=0;
scanf("%d",&n);
z=n;
while(z)
{
scanf("%s",s[i]);
i++;
z--;
}
for(i=0;i<n;i++)
len[i]=strlen(s[i]);
for(j=1;j<n;j++)
{
m=len[0]-1;
t=len[j]-1;
while(j)
{
if(s[0][m]==s[j][t])
a[j]++;
else
break;
m--;
t--;
if(m<0||t<0)
break;
}
}
min=a[1];
for(i=2;i<n;i++)
if(min>a[i])
min=a[i];
min*=n-1;
printf("save %d characters\n",min);
k--;
for(i=1;i<n;i++)
a[i]=0;
}
return 0;
}
猴子吃桃问题
题目描述: 猴子第一天摘下若干桃子,吃了一半,还不过瘾,又多吃了一个。第二天吃掉剩下桃子的一半,又多吃了一个。以此类推,到第10天时,就只有一个桃子了。问猴子第一天摘下了多少桃子? 输入描述: 无 输出描述描述: 猴子摘下桃子的总数,注意程序最后不需要回车换行。 样式输入:
无
样式输出:
1534
源代码
#include<stdio.h>
int main()
{
int i,sum=1;
for(i=1;i<10;i++)
sum=(sum+1)*2;
printf("%d",sum);
return 0;
}
2源代码
#include<stdio.h>
int main()
{
int n,i,sum=1;
scanf("%d",&n);
for(i=1;i<n;i++)
sum=(sum+1)*2;
printf("%d",sum);
return 0;
}