导语: 先给前八道,下午上传剩下的。 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.题解
解法一:
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;
}
解法二:
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.题解
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.题解
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.题解
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.题解
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;
}
传送门-剩下的题解