导语:
先给前八道,下午上传剩下的。
QQ:3329998511
有更好的解法,欢迎互相学习讨论
传送门-剩下的题解
一 百鸡问题
1.题目描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
2.1输入描述:
测试数据有多组,输入n。
2.2输出描述:
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
3.示例1
输入
40
输出
x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99
4.题解
解法一:
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (5*x + 3*y + z/3 == 100&&z%3==0)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
解法二:
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int x=0;x<=n/5;x++)
for(int y=0;y<=n/3;y++){
int z=100-x-y;
int zz=z%3?z/3+1:z/3;
if(z>=0&&5*x+3*y+zz<=n)
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
return 0;
}
二 互换最大最小数
1.题目描述
输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出。
2.1输入描述:
测试数据有多组,输入n(1<=n<=20),接着输入n个数。
2.2输出描述:
对于每组输入,输出交换后的结果。
3.示例1
输入
2
1 3
输出
3 1
4.题解
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int a[20]={0},min,max;
scanf("%d",&a[0]);
min=max=0;
for(int i=1;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>a[max])
max=i;
if(a[i]<a[min])
min=i;
}
int temp=a[max];
a[max]=a[min];
a[min]=temp;
for(int i=0;i<n;i++)
printf("%d%c",a[i],i<n-1?' ':'\n');
}
return 0;
}
三 找X
1.题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
2.1输入描述:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
2.2输出描述:
对于每组输入,请输出结果。
3.示例1
输入
2
1 3
0
输出
-1
4.题解
#include<stdio.h>
#include<stdlib.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int *a=(int *)calloc(n,sizeof(int));
for(int i=0;i<n;i++){
scanf("%d",a+i);
}
int i=0,x;
scanf("%d",&x);
while(*(a+i)!=x&&i<n)
i++;
if(i==n)
printf("%d\n",-1);
else printf("%d\n",i);
}
return 0;
}
四 判断三角形类型
1.题目描述
给定三角形的三条边,a,b,c。判断该三角形类型。
2.1输入描述:
测试数据有多组,每组输入三角形的三条边。
2.2输出描述:
对于每组输入,输出直角三角形、锐角三角形、或是钝角三角形。
3.示例1
输入
3 4 5
输出
直角三角形
4.题解
#include<stdio.h>
int main(){
int a,b,c;
while(scanf("%d %d %d",&a,&b,&c)!=EOF){
if(a==0) break;
if(a+b<=c||b+c<=a||c+a<=b||a<=0||b<=0||c<=0){
printf("输入有误!\n");
continue;
}
if(a*a+b*b-c*c==0||b*b+c*c-a*a==0||c*c+a*a-b*b==0){
printf("直角三角形\n");
}else if(a*a+b*b-c*c>0&&b*b+c*c-a*a>0&&c*c+a*a-b*b>0){
printf("锐角三角形\n");
}else{
printf("钝角三角形\n");
}
}
}
五 众数
1.题目描述
输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。
2.1输入描述:
测试数据有多组,每组输入20个1-10之间的数。
2.2输出描述:
对于每组输入,请输出1-10中的众数。
3.示例1
输入
5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2
输出
5
4.题解
#include<stdio.h>
#define NUM 20
int main(){
int temp;
while(scanf("%d",&temp)!=EOF){
int a[11]={0};
int max=1;
a[temp]++;
for(int i=1;i<NUM;i++){
scanf("%d",&temp);
a[temp]++;
}
for(int i=2;i<=10;i++)
if(a[max]<a[i])
max=i;
printf("%d\n",max);
}
return 0;
}
六 最大公约数
1.题目描述
输入两个正整数,求其最大公约数。
2.1输入描述:
测试数据有多组,每组输入两个正整数。
2.2输出描述:
对于每组输入,请输出其最大公约数。
3.示例1
输入
49 14
输出
7
4.题解
#include<stdio.h>
#define NUM 20
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
int r;
do{
r=a%b;
a=b;
b=r;
}while(r!=0);
printf("%d\n",a);
}
return 0;
}
七 完数
1.题目描述
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
2.1输入描述:
测试数据有多组,输入n,n数据范围不大。
2.2输出描述:
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
3.示例1
输入
6
输出
6
4.题解
#include<stdio.h>
#define NUM 20
bool CompleteNum(int a){
int sum=0;
for(int i=1;i<=a/2;i++)
if(a%i==0)
sum+=i;
if(a==sum)
return 1;
return 0;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int sum=0;
int flag=1;
for(int i=2;i<=n;i++)
if(CompleteNum(i)){
if(flag){
flag=0;
printf("%d",i);
}else printf(" %d",i);
}
printf("\n");
}
return 0;
}
八 素数判定
1.题目描述
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。
2.1输入描述:
测试数据有多组,每组输入一个数n。
2.2输出描述:
对于每组输入,若是素数则输出yes,否则输入no。
3.示例1
输入
13
输出
yes
4.题解
#include<stdio.h>
#include<math.h>
bool isPrime(int a){
if(a<=1)
return 0;
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)
return 0;
return 1;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF)
if(isPrime(n))
printf("yes\n");
else printf("no\n");
return 0;
}