C++编程作业: 理性认识C程序 导论 编程题

本文介绍了五道编程题目,涉及数学运算、逻辑判断及数据处理等,旨在锻炼编程者的基础算法能力。从苹果被虫子吃掉的问题,到大象喝水的计算,再到成绩分析、奇偶数差值及整数位分离,每个题目都提供了详细的解答过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源: POJ

编程题#1:苹果和虫子

注意: 总时间限制: 1000ms 内存限制: 65536kB

1.1 描述

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

输入
输入仅一行,包括n,x和y(均为整数)。

输出
输出也仅一行,剩下的苹果个数

样例输入

第一组
10 4 9
第二组
10 4 36
第三组
10 4 100

样例输出

第一组
7
第二组
1
第三组
0

提示
注意:是要求完整的苹果数。

1.2 初始解答

#include <iostream>
#include <math.h>

using namespace std;

int result[3];

void calc(double num1, double num2, double num3, int no){
    double speed, remain;

    speed = 1 / num2;
    remain = num1 - ceil(speed * num3);
    if (remain >= 0)
        result[no] = (int)remain;
    else
        result[no] = 0;
}

int main() {
    char str1[20], str2[20], str3[20];
    int num1, num2, num3;

    scanf("%s", str1);
    scanf("%d%d%d", &num1, &num2, &num3);
    calc(num1, num2, num3, 0);
    scanf("%s", str2);
    scanf("%d%d%d", &num1, &num2, &num3);
    calc(num1, num2, num3, 1);
    scanf("%s", str3);
    scanf("%d%d%d", &num1, &num2, &num3);
    calc(num1, num2, num3, 2);

    cout << str1 << endl;
    cout << result[0] << endl;
    cout << str2 << endl;
    cout << result[1] << endl;
    cout << str3 << endl;
    cout << result[2] << endl;

    return 0;
}

1.3 重做解答

在Coursera上上传上面的代码,本地编译器能通过,Coursera不通过。而且最为曹丹的是Coursera的报错是只有类型没有错误提示的……经过反复试验发现好像不能写函数,行与行之间也不能有空格……
重新写的能通过的版本(以下同):

#include <iostream>
using namespace std;
int main()
{
	int n, x, y, result;
	n = y = y = result=0;
	cin >> n >> x >> y;
	if (y%x==0)
	{
		result = n - y / x;
	}
	else
	{
		result = n - (y / x+1);
	}
	if (result < 0) result = 0;
	cout << result << endl;
    return 0;
}

编程题#2:大象喝水

注意: 总时间限制: 1000ms 内存限制: 65536kB

2.1 描述

一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。

输入
输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深h和底面半径r,单位都是厘米。

输出
输出一行,包含一个整数,表示大象至少要喝水的桶数。

样例输入

第一组
23 11
第二组
1 1

样例输出

第一组
3
第二组
6367

2.2 提示

如果一个圆桶的深为h厘米,底面半径为r厘米,那么它最多能装Pi * r * r * h立方厘米的水。(设Pi=3.14159)
1升 = 1000毫升
1毫升 = 1 立方厘米

2.3 初始解答

#include <iostream>
#include <math.h>

using namespace std;

int result[2];
static double pi = 3.14159;

void calc(int h, int r, int no) {
    double v = pi * h * r * r;
    int calc = (int) ceil(20000 / v);

    if (v <= 20000)
        result[no] = calc;
    else
        result[no] = 1;
}

int main() {
    char str1[20], str2[20];
    int num1, num2;

    scanf("%s", str1);
    scanf("%d%d", &num1, &num2);
    calc(num1, num2, 0);
    scanf("%s", str2);
    scanf("%d%d", &num1, &num2);
    calc(num1, num2, 1);

    cout << str1 << endl;
    cout << result[0] << endl;
    cout << str2 << endl;
    cout << result[1] << endl;

    return 0;
}

2.4 重做解答

#include <iostream>
using namespace std;
#define PI 3.14159
#define SUM 20000
int main() { 
    int h, r, n;
    double total; 
    cin >> h >> r;
    total = PI * r * r * h; 
    n = SUM / total;
    if( n < SUM / total)
    { 
        cout << n + 1 << endl;
 } 
    else
    { 
        cout << n << endl;
 }
    return 0;
}

编程题#3:最高的分数

注意: 总时间限制: 1000ms 内存限制: 65536kB

3.1 描述

孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?

输入
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。

输出
输出一个整数,即最高的成绩。

样例输入

5
85 78 90 99 60

样例输出

99

3.2 解答

一开始我不知道cin方法是可以把空格作为分隔符的,导致我最初的代码构象是收集完输入的字符串之后按空格键分割然后分别赋值给数组元素……不过很明显这道题不需要这么复杂的方法:

#include <iostream>
using namespace std;
int main() {
    int n, max = 0, score;
    cin >> n;
    while (n--) {
        cin >> score; //cin可以以空格作为分隔符!
        if (score > max)
            max = score;
    }
    cout << max << endl;
    return 0;
}

编程题#4:最大奇数与最小偶数之差的绝对值

注意: 总时间限制: 1000ms 内存限制: 65536kB

4.1 描述

输入6个正整数,且这6个正整数中至少存在一个奇数和一个偶数。
设这6个正整数中最大的奇数为a,最小的偶数为b,求出|a-b|的值

输入
输入为一行,6个正整数,且6个正整数都小于100
输入保证这6个数中至少存在一个奇数和一个偶数

输出
输出为一行,输出最大的奇数与最小的偶数之差的绝对值

样例输入

第一组
1 2 3 4 5 6
第二组
1 6 3 8 5 10

样例输出

第一组
3
第二组
1

4.2 初始解答

这个提示错误答案了,但是我试了多组数据都没问题。于是也按照之前的一样改写成没有函数的形式了

#include <iostream>
#include <math.h>

using namespace std;

int result[2];

void calc(int no) {
    int length = 6, min = 999, max = 0, num;
    while (length--) {
        cin >> num;
        if (num % 2 != 0) {
            if (num > max) {
                max = num;
            }
        }
        if (num % 2 == 0) {
            if (num < min) {
                min = num;
            }
        }
    }
    result[no] = abs(max - min);
}

int main() {
    char str1[20], str2[20];

    cin >> str1;
    calc(0);
    cin >> str2;
    calc(1);

    cout << str1 << endl << result[0] << endl;
    cout << str2 << endl << result[1] << endl;
}

4.3 重做解答

#include <iostream>
using namespace std;
int main()
{
	int x=0;
	int oddmax = 0;
	int evenmin = 100;
	int result = 0;
	for (int i = 0; i < 6; i++)	{
		cin >> x;
		if (x % 2 == 0)	{
			if (x <evenmin) evenmin = x;
		}
		else {
			if (x >oddmax) oddmax = x;
		}
	}
	result = oddmax - evenmin;
	if (result < 0) result = -result;
	cout << result << endl;
    return 0;
}

编程题#5:分离整数的各个数位

注意: 总时间限制: 1000ms 内存限制: 65536kB

5.1 描述

从键盘输入一个任意的三位整数,要求正确地分离出它的百位、十位和个位数,并分别在屏幕上输出,输出采用每行输出一个数的方式,不带其它符号。

输入
一个任意的三位整数

输出
一个任意的三位整数

样例输入

123

样例输出

1
2
3

5.2 解答

#include <iostream>
#include <math.h>
using namespace std;
int main() {
    int num, h, t, o;
    cin >> num;
    o = num % 10;
    t = (num % 100 - o) / 10;
    h = (num - o - 10 * t) / 100;
    cout << h << endl << t << endl << o << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值