一、百钱百鸡问题
问题描述:
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?
#includeint main()
{
int i,j,k;
for(i=0;i<=100;i++
{
for(j=0;j<=100;j++)
{
for(k=0;k<=100;k++)
{
if(i+j+k==100 && k%3==0 && i*5+j*3+k/3==100)
{
printf("公鸡%d只,母鸡%d只,雏鸡%d只\n",i,j,k);
}
}
}
}
return 0;
}
二、求三个数的最小公倍数
问题描述
输入 3 个数 a、b、c, 求这 3 个数的最小公倍数。
#include
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int max;
max=a;
if(max
{
max=b;
}
if(max
{
max=c;
}
for(int i=max;;i++)
{
if(i%a==0&&i%b==0&&i%c==0)
{
printf("%d,%d和%d的最小公倍数是%d",a,b,c,i);
break;
}
}
return 0;
}
三、韩信点兵问题
问题描述
求韩信一共有多少兵。
韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从 1 至5报数,最末一个士兵报的数为 1;
按从 1 至 6 报数,最末一个士兵报的数为 5;
按从 1 至 7 报数,最末一个士兵报的数为 5;
按从 1 至 11 报数,最末一个士兵报的数为 10;
按从 1 至 13 报数,最末一个士兵报的数为 11。
请问韩信至少有多少兵?
#include
int main()
{
int i;
for(i=1;;i++)
{
if(i%5==1&&i%6==5&&i%7==5&&i%11==10&&i%13==11)
{
printf("士兵最少有%d个",i);
break;
}
}
return 0;
}
四、猴子吃桃问题
问题描述:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以此往后,到第十天早上想再吃时,就只剩一个桃子了。
#includeint main()
{
int n,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum=(sum+1)*2;
}
printf("原有%d个桃子",sum);
return 0;
}
五、水仙花数问题
问题描述:
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3+5^3+3^3。 本题要求编写程序,计算所有N位水仙花数。
#include
#include
int main()
{
int n,count=0;
scanf("%d",&n);
printf("%d位数得水仙花数如下:\n",n);
for(int i=pow(10,n-1);i<=pow(10,n);i++)
{
int p=i;
int sum=0;
while(p)
{
int temp=p%10;
int ever=1;
for(int y=0;y
{
ever*=temp;
}
sum+=ever;
p/=10;
}
if(sum==i)
{
printf("%d\n",i);
count++;
}
}
printf("%d位数得水仙花数有%d个",n,count);
}
六、判断日期是否合法
问题描述:
编写一个能判断输入的日期是否合法的小程序。如果合法,则按照年月日的输出此日期,比如1998年6月26日。;否则提示用户:您输入的日期有误,请重新输入!
#include int main(){
int y, m, d;
int tag=0;
int sign=0;
int dayvalid;
scanf("%d,%d,%d", &y, &m, &d);
if(y%4==0&&y%100!=0||y%400==0)
{
sign==1;
}
if(m>=1&&m<=12)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayvalid=31;
break;
case 4:
case 6:
case 9:
case 11:
dayvalid=30;
break;
case 2:
if(sign==1)
dayvalid=29;
else
dayvalid=28;
break;
deflault:
break;
}
if(d>=0&&d<=dayvalid)
tag=1;
}
if ( tag == 1 )
printf("%d年%d月%d日。", y, m, d );
else
printf("您输入的日期有误,请重新输入!");
return 0;
}
七、求矩阵的对角线和
问题描述:
编写一个能计算4∗4矩阵2条对角线元素之和的小程序。
#include
int main()
{
int i, j;
float a[4][4], sum = 0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%f",&a[i][j]);
}
}
for(i=0;i<4;i++)
{
sum+=a[i][i]+a[i][3-i];
}
printf("sum=%f", sum );
return 0;
}
八、输入区间内的素数
问题描述:
输出给定区间内的全部素数,并计算给定区间内有多少个素数。
#include#include
int judgment_prime(int n);
int main()
{
int m,n;
scanf("%d %d",&m,&n);
if(m==1)
{
m=2;
}
printf("区间内的素数如下:\n");
int i,k=0;
for(i=m;i<=n;i++)
{
if(judgment_prime(i)==1)
{
printf("%d ",i);
k++;
}
}
printf("\n%d到%d共有%d个素数。",m,n,k);
}
int judgment_prime(int n)
{
int i,k=1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
k=0;
break;
}
}
return k;
}
九、分解质因数
问题描述:
每个合数都可以写成几个素数相乘的形式,这些素数就是合数的质因数,利用的代码对一个给定的合数进行分解成质因数。
#include#includeint main()
{
int n,i;
scanf("%d",&n);
printf("%d = ",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n/=i;
}
else
{
break;
}
}
}
printf("%d",n);
}
十、某个日期是一年中的多少天
问题描述:
输入任意一个日期,编写一个程序输出该日期是一年的第多少天。
#include
int main()
{
int y,m,d;
int m_2,i,sum=0;
printf("今天是:\n");
scanf("%d_%d_%d",&y,&m,&d);
if((y%100!=0&&y%4==0)||y%400==0)
{
m_2=29;
}
else
{
m_2=28;
}
for(i=1;i
{
case 2:sum+=m_2;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:sum+=31;
break;
default:sum+=30;
break;
}
sum+=d;
printf("是一年中的第%d天",sum);
return 0;
}
十一、十进制转化为二进制
问题描述:
输入一个整数,编写程序输入所对应的二进制数。
#include
int binary(int n);
int main()
{
int n;
scanf("%d",&n);
printf("十进制的%d对应二进制为:",n);
binary(n);
return 0;
}
int binary(int n)
{
if(n==0)
printf("%d",0);
else if(n==1)
printf("%d",1);
else
{
binary(n/2);
printf("%d",n%2);
}
return 0;
}
十二、学生名次排列
问题描述:
输入n个学生的学号、姓名和分数,并且按照分数从高到低给学生排名次。
#include
struct student
{
int id;
char name[10];
float score;
};//定义结构体变量
int main()
{
int i,j,len;
scanf("%d",&len);
struct student temp;
struct student stu[len];
for(i=0;i
{
scanf("%d %s %f",&stu[i].id,stu[i].name,&stu[i].score);
}//输入学生信息
for(i=0;i
{
for(j=0;j
{
if(stu[j].score
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}//利用冒泡排序按学生分数由高到低排列
printf("*********排序后的学生信息**********\n");
for(i=0;i
{
printf("%d %s %.2f\n",stu[i].id,stu[i].name,stu[i].score);
}//输出
return 0;
}
十三、 平均成绩
问题描述:
给定一所学校学生的体育成绩,请你统计全班的平均成绩和男生、女生的平均成绩。
输入格式:
输入首先在第一行中给出一个正整数 N(≤10000),即全校学生人数。最后 N 行,每行按照格式 性别 成绩 给出一位学生的信息。其中 性别 为 1 表示男生,0 表示女生;成绩 是一个 0 到 100 之间的整数。
输出格式:
在一行中依次输出全班的平均成绩、男生的平均成绩、女生的平均成绩。输出小数点后1位,数字间有一个空格分隔。
注意:如果全是男生或全是女生,则缺少的性别就没有办法计算平均分,相应的位置应该输出一个 X 表示没有。(来源PTA520钻石争霸赛)
#include
int main()
{
int len;
int sex,score;
double sum_1,sum_2,sum;
int cnt_1,cnt_2;
sum=sum_1=sum_2=0;
cnt_1=cnt_2=0;
scanf("%d",&len);
for(int i=0;i
{
scanf("%d %d",&sex,&score);
if(sex==0)
{
sum_1+=score;
cnt_1++;
}
else
{
sum_2+=score;
cnt_2++;
}
}
sum=sum_1+sum_2;
printf("%.2lf ",(double)(sum/(cnt_1+cnt_2)));
if(cnt_1)
{
printf("%.2lf ",(double)(sum_1/cnt_1));
}
else
{
printf("X");
}
if(cnt_2)
{
printf("%.2lf ",(double)(sum_2/cnt_2));
}
else
{
printf("X");
}
return 0;
}
十四、特殊a串数列求和
问题描述:
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。要求输入在一行中给出不超过9的正整数a和n。(来源:pta)
#includeint main()
{
int a,n;
double sum,x;
int i;
sum=0;
x=1;
scanf("%d %d",&a,&n);
if(a>9||a<0||n>9||n<0)
{
return 0;
}
for(i=1;i<=n;i++)
{
sum += x * a;
x=x*10+1;
}
printf("s = %.0lf",sum);
return 0;
}
十五、统计数字
问题描述:
请输入一个整数n,统计[1 , n]范围内各数字之和能被15整除的整数个数,并输出满足条件的整数。(来源Educoder)
#include
int main()
{
int n,i,sum,p,cnt;
cnt=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=0;
p=i;
while(p!=0)
{
sum+=p%10;
p/=10;
}
if(sum%15==0)
{
cnt++;
printf("%d\t",i);
}
}
printf("\n%d",cnt);
return 0;
}
十六、打印菱形
问题描述:
输入打印行数N,输出共2N-1行的菱形。
#include
int main()
{
int n;
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
printf(" ");
}
for(k=1;k<=2*i-1;k++)
{
printf("*");
}
printf("\n");
}
for(i=1;i
{
for(j=1;j<=i;j++)
{
printf(" ");
}
for(k=1;k<=2*(n-i)-1;k++)
{
printf("*");
}
printf("\n");
}
}
十七、三个数排序
问题描述:
将输入的任意三个数按从小到大顺序排列;
#include
int main()
{
int a,b,c;
int temp;
printf("输入三个数:");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(a>c)
{
temp=a;
a=c;
c=temp;
}
if(b>c)
{
temp=b;
b=c;
c=temp;
}
printf("排列后的顺序为%d
return 0;
}
十八、作业评分
问题描述:
有N个评委打分,去掉一个最高分和一个最低分之后求平均分;
#include
int main()
{
int n,score_1,score;
scanf("%d",&n);
int i=0;
int max,min,sum=0;
scanf("%d",&score_1);
max=min=score_1;
while(i
{
scanf("%d",&score);
if(max
{
max=score;
}
if(min>score)
{
min=score;
}
sum+=score;
i++;
}
sum+=score_1;
printf("%.2lf",(double)(sum-max-min)/(n-2));
return 0;
}
十九、输出月份英文
编程要求:编写一个用指针数组处理的程序,然后输出月份相应的英文名。
#includeint main()
{
int n;
char *p[12]={"January","February","March","April","May","June","July","August","September",
"October","November","December"};
scanf("%d",&n);
printf("%s",*(p+n-1));
return 0;
}
二十、求奇数和
编程要求:在一行输入一系列整数,当读到非正数时表示结束,该数字不做处理;
#include
int main()
{
int sum,n;
sum=0;
scanf("%d",&n);
do
{
if(n%2==1)
{
sum+=n;
}
scanf("%d",&n);
}
while(n>0);
printf("%d",sum);
return 0;
}