HDU2011-2020题解

文章目录

      • 2011 多项式求和
      • 2012 素数判定
      • 2013 蟠桃记
      • 2014 青年歌手大奖赛_评委会打分
      • 2015 偶数求和
      • 2016 数据的交换输出
      • 2017 字符串统计
      • (递推) 2018 母牛的故事
      • 2019 数列有序!
      • 2020 绝对值排序

2011 多项式求和

好像是做过的简单题。

#include 
int main() {
	int m, n;
	scanf("%d", &m);
	while (m--) {
	    scanf("%d", &n); 
	    double ans = 0.0;
	    int flag = 1;
	    for (int i = 1; i <= n; i++) {
	    	ans += flag * (1.0 / i);
	    	flag = -flag;
		}
	    printf("%.2lf\n", ans);
	} 
	return 0;
} 

2012 素数判定

#include 
#include 
bool isprime(int n) {
	if (n <= 1) return false;
	int sqr = (int)sqrt(1.0 * n);
	for (int i = 2; i <= sqr; i++) 
		if (n % i == 0) return false;
	return true;
}
int main() {
	int x, y;
	while (~scanf("%d%d", &x, &y) && (x || y)) {
		int flag = 1;
		for (int i = x; i <= y; i++) {
			int num = i * i + i + 41;
			if (!isprime(num)) {
				printf("Sorry\n");
				flag = 0; break;
			}
		}
		if (flag) printf("OK\n");
	}
	return 0;
} 

2013 蟠桃记

#include 
int main() {
	int n; 
	while (~scanf("%d", &n)) {
		int ans = 1;
		for (int i = 1; i < n; i++) 
			ans = 2 * ans + 2; 	//每天的前一天的桃子数目为该天*2+2 
		printf("%d\n", ans);
	}
	return 0;
}

2014 青年歌手大奖赛_评委会打分

#include 
int main() {
	int n;
	while (~scanf("%d", &n)) {
		int a[102], max = -1, min = 111, sum = 0;
		for (int i = 0; i < n; i++) {
			scanf("%d", &a[i]);
			sum += a[i]; //输入时处理 
			if (a[i] > max) max = a[i];
			if (a[i] < min) min = a[i];
		}
		printf("%.2lf\n", 1.0 * (sum - max - min) / (n - 2));
	}
	return 0;
} 

2015 偶数求和

每一个循环节输出循环节中的偶数的平均值,如果最后一个循环节不满足有m个数,就按实际元素和的平均值。

#include 
int main() {
	int n, m;
	while (~scanf("%d%d", &n, &m)) {
		int cnt = 0, sum = 0, flag = 0;
		for (int i = 2; i <= 2 * n; i += 2) {
			cnt++; sum += i;
			if (cnt == m) {
				if (!flag) printf("%d", sum / m); 
				else printf(" %d", sum / m);
				cnt = sum = 0;
				flag = 1; //输出了一个数 
			} else if (cnt < m && i == 2 * n) {
				if (!flag) printf("%d", sum / cnt); //输出第一个数就到了数列末尾 
				else printf(" %d", sum / cnt);
			}
		} 
		printf("\n");
	}
	return 0;
} 

2016 数据的交换输出

可能序列只有一个数。

#include 
#include 
using namespace std;
const int inf = 0x7fffffff;
int main() {
	int n;
	while (~scanf("%d", &n) && n) { //n != 0
		int a[101], min = inf, j = -1;
		for (int i = 0; i < n; i++) {
			scanf("%d", &a[i]);
			if (a[i] < min) {
				min = a[i];
				j = i;
			}
		}
		swap(a[0], a[j]);
		for (int i = 0; i < n - 1; i++) 
			printf("%d ", a[i]); 
		printf("%d\n", a[n - 1]);
	} 
	return 0;
}

2017 字符串统计

#include 
#include 
#include 
#include 
using namespace std;
int main() {
	int n;
	string s;
	scanf("%d", &n);
	while (n--) {
		cin >> s;
		int ans = 0; 
		for (int i = 0; i < s.size(); i++) 
			if (isdigit(s[i])) ans++;
		printf("%d\n", ans);
	} 
	return 0;
}

(递推) 2018 母牛的故事

这一题也可以预先打表。不过递推很简单就是了。

#include 
#include 
using namespace std;
int main()
{ 
	int n, nums[60] = {0, 1, 2, 3}; //第一年1头母牛 n >= 4 
	for (int i = 4; i < 60; i++) 
		//这一年的母牛数量为去年的母牛数量+今年能够生育的母牛生育的数量
		nums[i] = nums[i - 1] + nums[i - 3]; 
	while (~scanf("%d", &n) && n)   
		printf("%d\n", nums[n]);
    return 0;
}

2019 数列有序!

按理说这道题应该用插入排序的思想;不过考虑是黑盒测试,可以直接输出小于m的数,然后输出m,然后输出大于m的数。

#include 
int main() {
	int n, m;
	while (~scanf("%d%d", &n, &m) && (n || m)) {
		int a[110], i;
		for (i = 0; i < n; i++) scanf("%d", &a[i]);
		for (i = 0; a[i] < m; i++) {
			if (i != 0) printf(" ");
			printf("%d", a[i]);
		}
		if (i != 0) printf(" %d", m); //不是第一个数 
		else printf("%d", m); //m小于所有的数列值 
		for (; i < n; i++) printf(" %d", a[i]);
		printf("\n");
	}
	return 0;
}

2020 绝对值排序

#include 
#include 
using namespace std;
bool cmp(int a, int b) {
	return abs(a) > abs(b);
}
int main() {
	int n;
	while (~scanf("%d", &n) && n) {
		int a[110];
		for (int i = 0; i < n; i++) scanf("%d", &a[i]);
		sort(a, a + n, cmp);
		for (int i = 0; i < n - 1; i++) printf("%d ", a[i]);
		printf("%d\n", a[n - 1]); 
	}
	return 0;
} 

你可能感兴趣的:(HDU)