1
题目描述
本关任务:m 个人的成绩存放在 score 数组中,请编写函数 fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的人数放在 below 所指的数组中。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数 fun 中填入你编写的若干语句。
输入格式
个人成绩数组。
输出格式
低于平均分的成绩。
输入输出样例
输入1
10 20 30 40 50 60 70 80 90
输出1
10 20 30 40
#include
#include
int fun(int score[], int m, int below[]) {
int sum = 0, count = 0; // 用于计算总和和低于平均分的人数
double ave; // 使用double类型以提高精度
// 计算总分和平均分
for (int i = 0; i < m; i++) {
sum += score[i];
}
ave = (double)sum / m;
// 找出低于平均分的成绩,并放入below数组
for (int i = 0; i < m; i++) {
if (score[i] < ave) {
below[count++] = score[i]; // 将低于平均分的成绩存入数组
}
}
return count; // 返回低于平均分的人数
}
int main() {
int i, n, below[9];
int score[9];
for (i = 0; i < 9; i++) {
scanf("%d", &score[i]);
}
n = fun(score, 9, below);
for (i = 0; i < n; i++) {
printf("%d ", below[i]);
}
printf("\n");
return 0;
}
2
工地有 n 块砖头需要搬运,但由于重量限制,每次只能搬 1 块或者 2 块,你能帮工地计算下能有多少种不同的搬运方法吗?
测试举例
输入
3
输出
3
#include
int main() {
int n, i;
scanf("%d", &n);
if (n == 0) {
printf("0\n");
return 0;
} else if (n == 1) {
printf("1\n");
return 0;
}
int dp[1001] = {0};
dp[0] = 1;
dp[1] = 1;
for (i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
// 输出结果
printf("%d\n", dp[n]);
return 0;
}
3
孔融没有兄弟姐妹,到了周末,就找堂兄孔明、堂姐孔茹、堂弟孔伟等7个堂兄妹来到家里玩。孔融妈妈买了8个梨给孩子们吃,结果小黄狗桐桐淘气叼走了一个,大花猫鑫鑫偷偷藏了一个。孔融抢过剩下的6个梨,妈妈止住他,说他要和大家平分吃。孔融不高兴,说8个人怎么分6个梨?妈妈说可以用分数解决这个问题。孔融学过分数,说把每个梨切8个相等的块,每个人拿6块就行了。妈妈说不用切那么多块,每个梨切4个相等的块,每个人拿3块正好。孔融糊涂了。孔明说,我来教你。于是孔明给孔融讲起了分数的化简。
分数化简要化简到最简形式,比如12/20可以化简成6/10和3/5,但3/5是最简形式;100/8可以化简成 50 /4和 25 /2 , 而25/2 为最简形式。为了降低难度,不要求将假分数(如7/2)化简成带分数(3 )形式。请编程帮助孔融将任意一个分数化简成最简形式。先从键盘输入两个整数m和n(1<=m,n<=10000) ,其中m表示分子,n表示分母。然后输出分数化简后的最简形式。
函数原型:int Gcd(int a, int b);
函数功能:计算a和b的最大公约数,输入数据超出有效范围时返回-1。
#include
int Gcd(int a, int b);
int main(void) {
int m, n, f;
scanf("%d,%d", &m, &n);
f = Gcd(m, n);
if (f != -1) {
printf("%d/%d\n", m / f, n / f);
} else {
printf("Input error!\n");
}
return 0;
}
int Gcd(int a, int b) {
int r;
if (a <= 0 || b <= 0 || a > 10000 || b > 10000) {
return -1;
}
while (b != 0) {
r = b;
b = a % b;
a = r;
}
return a;
}
4
求兔子问题。第1个月有1对兔子,每对兔子从出生后第3个月起,就可每个月生1对兔子。问第n个月有多少对兔子?
#include
int fib(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
int main(void) {
int i, n;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
if ((i - 1) % 4 == 0) printf("\n");
printf("%5d只兔子", fib(i));
}
printf("\n");
return 0;
}
5
两个自然数,计算其和,如果输入的答案正确,则显示“right!”,否则提示重做,显示“Not correct! Try again!”;最多给三次机会,如果三次仍未做对,显示“Not correct! You have tried three times! Test over!”,程序结束。
输入输出样例1:
输入:
10,30
40
输出:
Input a, b:
10+30=Right!
输入输出样例2:
输入:
100,200
200
400
300
输出:
Input a, b:
100+200=Not correct. Try again!
100+200=Not correct. Try again!
100+200=Right!
#include
int Add(int a, int b)
{
int sum;
printf("%d+%d=",a,b);
scanf("%d",&sum);
return sum == a + b;
}
void Print(int flag, int chance)
{
if (flag)
printf("Right!\n");
else if(chance < 3)
printf("Not correct. Try again!\n");
else
printf("Not correct. You have tried three times!\nTest over!\n");
}
int main()
{
int a, b, answer, chance;
printf("Input a, b:\n");
scanf("%d,%d", &a, &b);
chance = 0;
do
{
answer = Add(a, b);
chance++;
Print(answer, chance);
} while ((!answer) && (chance < 3));
return 0;
}
6
从键盘输入一个班(全班最多不超过30人)学生的某门课的成绩,当输入成绩为负值时,输入结束,统计不及格人数并打印不及格学生名单。
输入输出样例:
输入:
202201 70
202202 80
202203 90
202204 60
-1 -1
输出:
Please enter num and score until score<0:
Total students:4
#include
int main() {
int num; // 学号
int score; // 成绩
int count = 0; // 学生总数
int fail_count = 0; // 不及格人数
printf("Please enter num and score until score<0:\n");
// 输入学号和成绩
while (1) {
scanf("%d %d", &num, &score);
// 如果成绩为负值,结束输入
if (score < 0) {
break;
}
// 如果成绩不及格,记录不及格人数
if (score < 60) {
fail_count++;
}
count++; // 总学生数增加
}
// 输出总学生数
printf("Total students:%d\n", count);
return 0;
}
7
输入整数数组 arr ,找出其中最小的 k 个数
输入输出格式
输入格式
第一行有一个整数 numsSize,表示数组 nums 的大小;
第二行有 numsSize 个整数,表示数组 nums 的所有元素,每个整数用一个空格隔开。
第三行输入 k 的值
输出格式
一行输出数组 nums 的所有元素,有 numsSize 个整数,每个整数用一个空格隔开。
输入输出样例1
输入
3
1 2 3
2
输出
1 2
#include
// 快速选择算法的分区函数
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low;
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
}
int temp = arr[i];
arr[i] = arr[high];
arr[high] = temp;
return i;
}
// 快速选择算法
void quickSelect(int arr[], int low, int high, int k) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
if (pivotIndex == k - 1) return;
if (pivotIndex > k - 1) quickSelect(arr, low, pivotIndex - 1, k);
else quickSelect(arr, pivotIndex + 1, high, k);
}
}
int main() {
int numsSize, k;
scanf("%d", &numsSize);
int arr[100]; // 假设数组大小不超过100
for (int i = 0; i < numsSize; i++) {
scanf("%d", &arr[i]);
}
scanf("%d", &k);
// 确保k在有效范围内
if (k < 1 || k > numsSize) {
printf("Invalid k value.\n");
return 1;
}
// 使用快速选择算法找出最小的k个数
quickSelect(arr, 0, numsSize - 1, k);
// 打印最小的k个数
for (int i = 0; i < k; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
8