文章目录
- 121. 小乐乐算最高分
- 122. 小乐乐计算求和
- 123. 小乐乐计算函数
- 124. 小乐乐查找数字
- 125. kiki学程序设计基础
- 126. kiki算期末成绩
- 127. kiki说祝福语
- 128. kiki的最高分
- 129. 求质数的个数
- 130. kiki去重整数并排序
121. 小乐乐算最高分
- 问题描述:小乐乐的老师BoBo想知道班级中谁的数学成绩最高,请编程帮他实现。
- 输入描述:共两行
- 第一行输入一个数n,代表小乐乐的班级中n个同学。
- 第二行输入n个数,用空格相隔,代表班级中每个人的数学成绩。
- 输出描述:一个整数,代表班级中最高的数学成绩。
- 示例:
输入:3
99 89 39
输出:99
- 代码实现:
#include <stdio.h>
int main()
{
int n,score,max = 0;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&score);
if(score > max)
{
max = score;
}
}
printf("%d\n",max);
return 0;
}
122. 小乐乐计算求和
- 问题描述:小乐乐想计算一下1!+2!+3!+…+n!。
- 输入描述:一行,一个整数n。
- 输出描述:一行,一个整数,表示1!+2!+3!+…+n!的结果。
- 示例:
- 输入:3
- 输出:9
- 备注:结果范围在int类型范围之内
- 代码实现:
#include <stdio.h>
int main()
{
int n;
int ch = 1,sum = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
ch *= i;
sum += ch;
}
printf("%d\n",sum);
return 0;
}
123. 小乐乐计算函数
- 问题描述:小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。
- 输入描述:一行,输入三个整数,用空格隔开,分别表示a, b, c。
- 输出描述:一行,一个浮点数,小数点保留2位,为计算后m的值。
- 示例:
- 输入:1 2 3
- 输出:0.30
- 代码实现:
#include <stdio.h>
float max3(int a,int b,int c)
{
if(a > b && a > c) return a;
else if(b > a && b > c) return b;
else return c;
}
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
float m = max3(a+b,b,c) / (max3(a,b+c,c)+max3(a,b,b+c));
printf("%.2f\n",m);
return 0;
}
124. 小乐乐查找数字
- 问题描述:给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。
- 输入描述:共3行
- 第一行,一个整数,表示n(1 <= n <= 100)。
- 第二行,共输入n个整数,两个整数之间用空格分隔。
- 第三行,输入一个整数,表示要查找的整数x。
- 输出描述:一行,表示整数x出现的次数。
- 示例:
输入:5
1 1 2 1 3
1
输出:3
- 代码实现:
#include <stdio.h>
int main()
{
int n,x,i,count = 0;
int arr[100] = {0};
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&x);
for(i = 0;i < n;i++)
{
if(x == arr[i])
{
count++ ;
}
}
printf("%d\n",count);
return 0;
}
125. kiki学程序设计基础
-
问题描述:BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。
-
输入描述:无
-
输出描述:
printf("Hello world!\n");
cout << "Hello world!" << endl;
- 代码实现:
#include <stdio.h>
int main()
{
printf("printf(\"Hello world!\\n\");\n");
printf("cout << \"Hello world!\" << endl;");//这里有四个空格
return 0;
}
126. kiki算期末成绩
- 问题描述:KiKi这学期努力学习程序设计基础,要期末考试了,BoBo老师告诉他,总成绩包括四个部分,如下:总成绩 = 实验成绩 * 20% + 课堂表现成绩 * 10% + 过程考核成绩 * 20% + 期末上机考试成绩 * 50%,现在输入KiKi的各项成绩,请计算KiKi的总成绩。
- 输入描述:一行,包括四个整数(百分制),用空格分隔,分别表示实验成绩,课堂表现成绩,过程考核成绩,期末上机考试成绩。
- 输出描述:一行,总成绩,保留小数点一位。
- 示例:
- 输入:100 100 90 80
- 输出:88.0
- 代码实现:
#include <stdio.h>
int main()
{
float sum = 0;
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
sum = a*0.2 + b*0.1 + c*0.2 + d*0.5;
printf("%.1f\n",sum);
return 0;
}
127. kiki说祝福语
-
问题描述:2020年来到了,KiKi要对他的n位好朋友说n遍”Happy new year!Good luck!”的祝福语。
-
输入描述:输入只有一行,其中含有一个正整数 n(1≤n≤20),代表KiKi说祝福话的遍数。
-
输出描述:输出 n 行"Happy new year!Good luck!"。
-
示例:
输入:2
输出:
Happy new year!Good luck!
Happy new year!Good luck!
- 代码实现:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
printf("Happy new year!Good luck!\n");
}
return 0;
}
128. kiki的最高分
- 问题描述:KiKi知道了大一三科比较重要课程的分数,包括:程序设计基础,高数,英语,请编程帮他找到三科中的最高分。
- 输入描述:一行,三个整数,用空格分隔,代表三科成绩。
- 输出描述:一行,一个整数,代表输入三科分数中的最高分数。
- 示例:
- 输入:90 88 99
- 输出:99
- 代码实现:
#include <stdio.h>
int MAX3(int a,int b,int c)
{
if(a > b && a > c)
return a;
else if(b > a && b > c)
return b;
else
return c;
}
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",MAX3(a,b,c));
return 0;
}
129. 求质数的个数
- 问题描述:KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。
- 输入描述:无
- 输出描述:一行,一个整数,表示所有三位整数中,有多少个质数。
- 代码实现:
#include <stdio.h>
//是素数则返回1,否则返回0
int is_prime(int i)
{
//拿2到i-1之间的数去试除i
for(int j = 2;j < i-1;j++)
{
if(0 == i % j)
{
return 0;
}
}
return 1;
}
int main()
{
int count = 0;
for(int i = 100;i <= 999;i++)
{
//判断i是否为素数
if(1 == is_prime(i))
{
count++ ;
}
}
printf("%d\n",count);
return 0;
}
130. kiki去重整数并排序
- 问题描述:给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。
- 输入描述:
- 第一行,输入一个整数n,表示序列有n个整数。
- 第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。
- 输出描述:去重并且从小到大排列的整数序列,整数之间用空格分隔。
- 示例:
输入:6
5 3 3 4 2 2
输出:2 3 4 5
- 代码实现1:暴力求解
- 先利用冒泡排序将序列从小到大先排好序;
- 在让相邻的两个元素进行比较,如果出现重复的元素,则让后面的元素往前挪动覆盖掉重复的元素。当有n个元素的时候,要去重则最多要比较n-1对元素。
#include <stdio.h>
int main()
{
int n,i;
int arr[1000]= {0};
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d ",&arr[i]);
}
//先排序再去重
for(i = 0;i < n-1;i++)//冒泡排序
{
for(int j = 0;j < n-i-1;j++)
{
if(arr[j] > arr[j+1])
{
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1]= t;
}
}
}
//去重
for(i = 0;i < n-1;i++)//取中最多比较的次数为n-1次
{
if(arr[i] == arr[i+1])
{
//把从i+1往后的元素统统往前覆盖
for(int k = i;k < n-1;k++)
{
arr[k] = arr[k+1];
}
n--;//去重了一个元素,要少一个元素
i--;//让i还是保持i+1的位置
}
}
//打印
for(i = 0;i < n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
- 代码实现2:拿空间换时间
- 既然输入的数字不超过一千,那么就创建一个1001大小的数组(1001才有下标1000),然后将数组完全初始化为0;
- 按照输入的数字来存放进数组中,如:输入1则存在下标为1的地方,这样如果后面再出现1则继续存在下标1处,就能将重复的数字去掉了;
- 当循环结束的时候,此时不仅去完重了同时也排好序了,再从前往后将数组中非0的元素全部打印出来就搞定了。
#include <stdio.h>
int main()
{
int n,i;
int arr[1001] = {0};
scanf("%d",&n);
for(i = 0;i < n;i++)
{
int m;
scanf("%d",&m);
arr[m] = m;
}
for(i = 0;i <= 1000;i++)
{
if(0 != arr[i])
{
printf("%d ",arr[i]);
}
}
putchar('\n');
return 0;
}