bupt c++ 上机 (2)

A: 打点滴

题目描述

在医院打点滴时,假设点滴的规律是,滴一滴,停一下,再滴两滴,停一下,再滴三滴,停一下。每一滴1毫升,用1秒,停一下的时间也是1秒。请问一瓶V毫升的药液,多久输完?其中V是小于5000的正整数。

输入

10

输出

13

#include <cstdio>
using namespace std;
int V, t, sud;
int main() {
	scanf ("%d", &V);
	for (int i = 1; ; i++) {
		sud += i;
		if (sud >= V) {
			t = V + i - 1;
			break;
		}
	}
	printf ("%d\n", t);
	return 0;
}

B: 素数还是合数

题目描述

键盘输入一个大于1的正整数n,判断其是素数还是合数,如果是素数,则输出“素数”,如果是合数,则输出其所有约数(约数包括1和它本身),约数间用空格分隔。

输入

13

输出

素数

样例输入

24

样例输出

1 2 3 4 6 8 12 24
#include <cstdio>
#include <cmath>
using namespace std;
bool check(int a) {
	if (a == 2) return 1;
	for (int i = 2; i < sqrt(a); i++) {
		if (a % i == 0) return 0;
	} return 1;
}
void print(int a) {
	for (int i = 1; i <= a; i++)
		if (a % i == 0) printf ("%d ", i);
	puts("");
}
int n;
int main() {
	scanf ("%d", &n);
	if (check(n)) printf("素数\n");
	else print(n);
	return 0;
}

C:仓库结算

题目描述

某仓库共有ABCDE五种货物,每天需要补货的数量不同,每种货物的单价不同,如下所示。由键盘输入五种货物需要补货的数量,请计算出当日仓库需支付多少货款。由于补货时不一定按照ABCDE的顺序补货,建议使用switch语句与循环语句编写。

货物名称  货物单价

  A             10

  B             5

  C             3

  D             20

  E             13

输入

B 3 E 2 A 1 D 4 C 10

输出

161

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;

int tot, flag;
char ch1, ch2, ch3;
int num;
int main() { 

	for (int i = 1; i <= 5; i++) {
		ch1 = getchar();
		//putchar(ch1);
		scanf (" %d", &num);
		ch2 = getchar();
		//putchar(ch2 + 1);
		if (ch1 == 'A') flag = 1;
		if (ch1 == 'B') flag = 2;
		if (ch1 == 'C') flag = 3;
		if (ch1 == 'D') flag = 4;
		if (ch1 == 'E') flag = 5;
		if (flag) {
			if (flag == 1) tot += 10 * num;
			if (flag == 2) tot += 5 * num;
			if (flag == 3) tot += 3 * num;
			if (flag == 4) tot += 20 * num;
			if (flag == 5) tot += 13 * num;
			flag = 0;
		}
		if (ch2 == '\n') break;
	}
	printf ("%d\n", tot);
}

D:数组使用

题目描述

编程:将1~100的自然数存到一个有100个元素的整型数组中(数组的下标为0~99),请在屏幕上输出如下数据:1)在屏幕上输出存储的100个自然数,每行输出10个,各数值之间用空格隔开。2)序号是素数的数据输出到屏幕上,格式要求:每行输出10个,数值之间用一个空格隔开

输入

输出

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

3 4 6 8 12 14 18 20 24 30

32 38 42 44 48 54 60 62 68 72

74 80 84 90 98

#include <cstdio>
#include <cmath>
using namespace std;
bool check(int a) {
	if (a <= 1) return 0;
	if (a == 2) return 1;
	for (int i = 2; i <= sqrt(a); i++) {
		if (a % i == 0) return 0;
	}
	return 1;
}
int prime[100], pos;
int main() {
	for(int i = 1; i <= 100; i++) {
		if (i % 10 == 0) printf ("%d\n", i);
		else printf ("%d ", i);
		//else printf(" ");
		if (i - 1 && check(i - 1)) prime[pos++] = i;
	}
	for (int i = 0; i < pos - 1; i++) {
		if ((i + 1) % 10 == 0) printf("%d\n", prime[i]);
		else printf ("%d ", prime[i]);
		//else printf (" ");
	} printf ("%d",prime[pos - 1]);
	return 0;
}

E: 评分统计

题目描述

编写一个评分统计程序。从键盘获取8个评委打分的百分制成绩(double类型),统计平均分时,去掉一个最高分和一个最低分,其余6个分数的平均值即为最后得分。请将这个分数输出到屏幕上,格式为:平均成绩是XXX。

输入

98.5 88 90 93 94 90.4 89 92

输出

 平均成绩是91.4

#include <cstdio>
#include <iostream>
using namespace std;
double a[8], tot;
double minn = 100, maxx = 0; 
int main() {
	for (int i = 0; i < 8; i++) {
		scanf ("%lf", &a[i]);
		minn = minn < a[i] ? minn : a[i];
		maxx = maxx > a[i] ? maxx : a[i];
		tot +=  a[i];
	} 
	//printf ("平均成绩是%lf\n", (tot - minn - maxx)/6);
	cout << "平均成绩是" << (tot - minn - maxx) / 6 << endl; 
	return 0;
}

F: 选择排序

题目描述

从键盘输入10个整型数据,将它们存在数组中,采用选择排序算法,按从小到大排序,并将排序后的数据输出到屏幕上,数据间用一个空格隔开。

输入

1 100 4 6 60 9 10 90 12 45

输出

1 4 6 9 10 12 45 60 90 100

#include <cstdio>
using namespace std;
int a[10], pos;
int main() {
	for (int i = 0; i < 10; i++)
		scanf ("%d", &a[i]);
	for (int i = 0; i < 10; i++) {
		pos = i;
		for (int j = i + 1; j < 10; j++)
			if (a[j] < a[pos]) {
				pos = j;
			}
		int t = a[i];
		a[i] = a[pos];
		a[pos] = t;

	}
	for (int i = 0; i < 10; i++)
		printf ("%d ", a[i]);
	return 0;
}

G:计算第几天

题目描述

定义一个结构型变量(包括年、月、日),并从键盘上获取该变量的值,计算该日在本年中是第几天,输出到屏幕上,格式为:“X年X月X日是本年中的第X天。”(提示:注意闰年问题)。

输入

2017 4 1

输出

2017年4月1日是本年中的第91天。

样例输入

2004 12 21

样例输出

2004年12月21日是本年中的第356天。

#include <cstdio>
using namespace std;
int rn[12] {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nm[12] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check (int a) {
	if (a % 400 == 0) return 1;
	if (a % 4 == 0 && a % 100 != 0) return 1;
	if (a % 100 == 0 && a % 400 != 0) return 0;
	return 0;
}
int n, y, r, tot;
int main() {
	scanf ("%d %d %d", &n, &y, &r);
	//printf ("%d\n", check(n));
	if (check(n)) {
		for (int i = 1; i <= y; i++) {
			if (i < y) tot += rn[i - 1];
			if (i == y) tot += r;
		}
	} else {
		for (int i = 1; i <= y; i++) {
			if (i < y) tot += nm[i - 1];
			if (i == y) tot += r;
		}
	}
	printf ("%d年%d月%d日是本年中的第%d天。\n", n, y, r, tot);
	return 0;
}
 

H: 字母统计

题目描述

从键盘输入一行或几行字符串行数由键盘输入,一行字符串用字符数组存储。请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。如果没有字母,请输出字符串中无字母。

输入

1

I come quickly !

输出

c:2

e:1

i:2

k:1

l:1

m:1

o:1

q:1

u:1

y:1

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
string s;
int a[27];
int flag;
int main() { int n;
	scanf ("%d\n", &n);
	for (int i = 1; i <= n; i++) {
		getline(cin, s);
		for (int j = 0; j < s.length(); j++) {
			if (s[j] >= 'A' && s[j] <= 'Z') s[j] += 'a' - 'A';
			if (s[j] >= 'a' && s[j] <= 'z') a[s[j] - 'a'] ++;
		}
	}
	for (int i = 0; i <= 25; i++) {
		if (a[i]) {
			printf ("%c:%d\n", i + 'a', a[i]);
			flag = 1;
		}
	} if (!flag) printf ("字符串中无字母。");
	return 0;
}
  • 19
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值