bupt c++ 上机(3)

问题 A: VC++实验5.2 数字分离

题目描述

编写三个函数,分别完成如下任务:

函数一,计算整数a除以整数b的商的整数部分;

函数二,计算整数a除以整数b的余数;

函数三,用函数一和函数二完成分离整数各位的功能,对于输入的1~32767之间的整数,打印出一列数字,每个数字间空一个格。例如,输入:4562  输出:4 5 6 2

#include 
#include 
using namespace std;
int chu(int a, int b) {
    return a / b;
}
int mod(int a, int b) {
    return a % b;
}
string s;
int main() {
    int a;
    scanf ("%d", &a);
    while (a) {
        int t = mod(a, 10);
        s += t + 48;
        a = chu(a, 10);
    }
    for (int i = s.length() - 1; i > 0; i--) 
        printf ("%c ", s[i]);
    printf ("%c\n", s[0]);
    return 0;
}

问题 B: VC++实验5.3 斐波那契数列

题目描述

用非递归函数,求Fibonacci数列第n项。键盘输入一个n,输出Fibonacci数列第n项的值。

输入

3

输出

2

#include 
using namespace std;
int fibo(int n) {
    if (n <= 2) return 1;
    int fir = 1;
    int sec = 1;
    int num = 0;
    for (int i = 3; i <= n; i++) {
        num = fir + sec;
        fir = sec;
        sec = num;
    } 
    return num;
}
int main() {
    int n;
    scanf ("%d", &n);
    printf ("%d\n", fibo(n));
    return 0;
}

问题 C: VC++实验5.4 计算排列

题目描述

编写程序计算排列,排列的公式P(n,m)=n!/(n-m)!,其中n>=m。请使用两个函数分别实现计算阶乘和计算排列。键盘输入n和m的值,输出它们的排列值。

输入

4 3

输出

24

#include 
using namespace std;
int eval(int n, int m) {
	int k = n - m;
	int a = 1, b = 1;
	for (int i = k + 1; i <= n; i++) a *= i;
	// for (int i = 1; i <= k; i++) b *= i;
	return a;
}
int main() {
	int a, b;
	scanf ("%d %d", &a, &b);
	printf ("%d\n", eval(a, b));
	return 0;
}

问题 D: VC++实验5.6 分糖果

题目描述

有10个小朋友围成一圈分糖果,老师顺次分给每人一定数量糖果(初始值为偶数)然后按照下列规则调整,所有小朋友同时把自己的糖果分一半给右边的人,糖果数变为奇数的人,向老师补要一块糖果,问经过多少次调整后,大家糖果数一样多,且每人多少块。建立两个函数,一个负责传递糖果,一个负责判断所有人的糖果是否相等。

输入

12 2 8 22 16 4 10 6 14 20

输出

16 18

模拟就完事了。

#include 
using namespace std;
int a[10];

int check() {
	for (int i = 1; i < 10; i++) 
		if (a[i] != a[i - 1]) return 0;
	return 1;
}

int tot;
void work() {
	int b[10] = {0};
	for (int i = 0; i < 10; i++) {
		a[i] /= 2;
		int num = a[i];
		int pos = (i + 1) % 10;
		b[pos] += num;
	} tot++;
	for (int i = 0; i < 10; i++) a[i] += b[i];
	for (int i = 0; i < 10; i++) if (a[i] % 2) a[i]++;
	//for (int i = 0; i < 10; i++) printf ("%d ", a[i]);

	//printf ("\n");
}
void print() {
	printf ("%d %d\n", tot, a[0]);
}
int main() {
	for (int i = 0; i < 10; i++) 
		scanf ("%d", &a[i]);
	while (!check()) work();
	//for (int i = 0; !check(); i++, i %= 10) work()
	print(); return 0;
}
 

问题 E: VC++实验5.1 温度转换

题目描述

编写函数,把华氏温度F(double型)转换为摄氏温度C(double型),公式为C=(F-32)/1.8。键盘输入一个华氏温度,可以得到相应的摄氏温度。

输入

32

输出

0

#include 
#include 
using namespace std;
double eval(double a) {
	return (a - 32) / 1.8;
}
int main() {
	double f;
	scanf ("%lf", &f);
	//printf ("%lf", eval(f));
	cout << eval(f) << endl;
	return 0;
}

问题 F: VC++实验5.5 评分统计II

题目描述

歌手大奖赛共有10位评委,为每位选手打分(double型)。预赛部分歌手的分数,为去掉1个最高分、1个最低分后其余8个分数的平均值;决赛部分歌手的分数,为去掉2个最高分、2个最低分后其余6个分数的平均值。通过键盘输入10位评委的打分,以及当前处于哪个阶段(预赛部分用1表示,决赛部分用2表示)。主函数中,只负责输入数据、调用分数计算函数、输出结果,评分计算部分编写独立函数完成。

输入

98.5 88 90 93 94 90.4 89 92 88.6 97 2

输出

91.4

#include 
#include 
#include 
using namespace std;
double a[10], tot;
void print(int flag) {
	sort(a, a + 10);
	if (flag == 1) 
		cout << (tot - a[0] - a[9]) / 8 << endl;
	if (flag == 2) 
		cout << (tot - a[0] - a[9] - a[1] - a[8]) / 6 << endl;
}
int flag;
int main() {
	for (int i = 0; i < 10; i++) {
		scanf ("%lf", &a[i]); tot += a[i];
	}
	scanf ("%d", &flag);
	print(flag);
	return 0;
}

 

你可能感兴趣的:(code)