【HDU100】杭电入门一百道 C++ 全 题 解_杭电100题-程序员宅基地

技术标签: # HDU  算法  

“ Ctrl AC!一起 AC!”

题目集合链接:HDU2000-2099http://acm.hdu.edu.cn/listproblem.php?vol=11

前言

1. 好像没有HDU2038 呜呜呜

2. 主要是整合提供了AC的代码,思路不太详细qwq

目录

1. ASCII码排序(HDU2000)

2. 计算两点间的距离(HDU2001)

3. 计算球体积(HDU2002)

4. 求绝对值(HDU2003)

5. 成绩转换(HDU2004)

6. 第几天?(HDU2005)

7. 求奇数的乘积(HDU2006)

8. 平方和与立方和(HDU2007)

9. 数值统计(HDU2008)

10. 求数列的和(HDU2009)

11. 水仙花数(HDU2010)

12. 多项式求和(HDU2011)

13. 素数判定(HDU2012)

14. 蟠桃记(HDU2013)

15. 青年歌手大奖赛_评委会打分(HDU2014)

16. 偶数求和(HDU2015)

17. 数据的交换输出(HDU2016)

18. 字符串统计(HDU2017)

19. 母牛的故事(HDU2018)

20. 数列有序!(HDU2019)

21. 绝对值排序(HDU2020)

22. 发工资咯:)(HDU2021)

23. 海选女主角(HDU2022)

24. 求平均成绩(HDU2023)

25. C语言合法标识符(HDU2024)

26. 查找最大元素(HDU2025)

27. 首字母变大写(HDU2026)

28. 统计元音(HDU2027)

29. Lowest Common Multiple Plus(HDU2028)

30. Palindromes _easy version(HDU2029)

31. 汉字统计(HDU2030)

32. 进制转换(HDU2031)

33. 杨辉三角(HDU2032)

34. 人见人爱A+B(HDU2033)

35. 人见人爱A-B(HDU2034)

36. 人见人爱A^B(HDU2035)

37. 改革春风吹满地(HDU2036)

38. 今年暑假不AC(HDU2037)

39. 三角形(HDU2039)

40. 亲和数(HDU2040)

41. 超级楼梯(HDU2041)

42. 不容易系列之二(HDU2042)

43. 密码(HDU2043)

44. 一只小蜜蜂...(HDU2044)

45. 不容易系列之(3)―― LELE的RPG难题(HDU2045)

46. 骨牌铺方格(HDU2046)

47. 阿牛的EOF牛肉串(HDU2047)

48. 神、上帝以及老天爷(HDU2048)

49. 不容易系列之(4)――考新郎(HDU2049)

50. 折线分割平面(HDU2050)

51. Bitset(HDU2051)

52. Picture(HDU2052)

53. Switch Game(HDU2053)

54. A == B ?(HDU2054)

55. An easy problem(HDU2055)

56. Rectangles(HDU2056)

57. A + B Again(HDU2057)

58. The sum problem(HDU2058)

59. 龟兔赛跑(HDU2059)

60. Snooker(HDU2060)

61. Treasure the new start, freshmen!(HDU2061)

62. Subset sequence(HDU2062)

63. 过山车(HDU2063)

64. 汉诺塔III(HDU2064)

65. "红色病毒"问题(HDU2065)

66. 一个人的旅行(HDU2066)

67. 小兔的棋盘(HDU2067)

68. RPG的错排(HDU2068)

69. Coin Change(HDU2069)

70. Fibbonacci Number(HDU70)

71. Max Num(HDU2071)

72. 单词数(HDU2072)

73. 无限的路(HDU2073)

74. 叠筐(HDU2074)

75. A|B?(HDU2075)

76. 夹角有多大(题目已修改,注意读题)(HDU2076)

77. 汉诺塔IV(HDU2077)

78. 复习时间(HDU2078)

79. 选课时间(HDU2079)

80. 夹角有多大II(HDU2080)

81. 手机短号(HDU2081)

82. 找单词(HDU2082)

83. 简易版之最短距离(HDU2083)

84. 数塔(HDU2084)

85. 核反应堆(HDU2085)

86. A1 = ?(HDU2086)

87. 剪花布条(HDU2087)

88. Box of Bricks(HDU2088)

89. 不要62(HDU2089)

90. 算菜价(HDU2090)

91. 空心三角形(HDU2091)

92. 整数解(HDU2092)

93. 考试排名(HDU2093)

94. 产生冠军(HDU2094)

95. find your present (2)(HDU2095)

96. 小明A+B(HDU2096)

97. Sky数(HDU2097)

98. 分拆素数和(HDU2098)

99. 整除的尾数(HDU2099)


1. ASCII码排序(HDU2000)

思路:冒泡排序,如果前面的字母大于后面的字母 就交换

代码:

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
	char a[5];
	while(cin>>a){
        //冒泡排序:
		for(int i=0;i<3;i++){
			for(int j=i;j<3;j++){
				if(a[i]>a[j]){ //交换
					int m=a[i];
					a[i]=a[j];
					a[j]=m;
				}
			}
		}
		for(int i=0;i<3;i++){
			if(i!=2) cout<<a[i]<<' ';
			else cout<<a[i];
		}
		cout<<endl;
	}
	return 0;
}

2. 计算两点间的距离(HDU2001)

思路:两点间的距离公式 

代码:

#include <iostream>
#include<string.h>
#include <algorithm>
#include <math.h>
using namespace std;
int main(){
	double a,b,c,d;
	while(cin>>a>>b>>c>>d){
		double k=sqrt((a-c)*(a-c)+(b-d)*(b-d));
		printf("%.2lf\n",k);
	}
	return 0;
}

3. 计算球体积(HDU2002)

思路:球体积的计算公式,注意PI的精度要够高

代码:

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
#define PI 3.1415927
using namespace std;
int main(){
	double n;
	while(cin>>n){
		double v=(4*PI*n*n*n)/3;
		printf("%.3lf\n",v);
	}
	return 0;
}

4. 求绝对值(HDU2003)

思路:fabs()求浮点数的绝对值(或直接判断改变正负)

代码:

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#define PI 3.1415927
using namespace std;
int main(){
	double n;
	while(cin>>n){
		double k=fabs(n);
		printf("%.2lf\n",k);
	}
	return 0;
}

5. 成绩转换(HDU2004)

思路:if else 的使用

代码:

#include <cstdio>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>

using namespace std;
int main(){
	int n;
	while(cin>>n){
		if(n>=90&&n<=100){
			cout<<"A"<<endl;
		}
		else if(n>=80&&n<=89){
			cout<<"B"<<endl;
		}
		else if(n>=70&&n<=79){
			cout<<"C"<<endl;
		}
		else if(n>=60&&n<=69){
			cout<<"D"<<endl;
		}
		else if(n>=0&&n<=59){
			cout<<"E"<<endl;
		}
		else{
			cout<<"Score is error!"<<endl;
		}
	}
	return 0;
}

6. 第几天?(HDU2005)

思路:先用一个数组存放每个月的天数,再用sum逐月逐日增加天数,若是闰年则需特殊处理二月

注意scanf输入格式!!!

代码:

#include<stdio.h>
int main()
{
    int num[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day,sum;
    while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
    {
        sum=0;
        if((year%4==0&&year%100!=0)||year%400==0) //是闰年
        {
            for(int i = 0; i < month-1; i++) //数组下标从 零 开始,但是月份从 一 开始
            {
                if(i==1)
                {
                    sum = sum + 29; //二月变成29天
                }
                else
                {
                    sum = sum + num[i];
                }
            }
            sum = sum + day;
            printf("%d\n",sum);
        }
        else
        {
            for(int i = 0; i < month-1; i++)
            {
                sum = sum + num[i];
            }
            sum = sum + day;
            printf("%d\n",sum);
        }
    }
    return 0;
}

7. 求奇数的乘积(HDU2006)

思路:判断奇数:如果某个数是奇数,则其二进制最低一位是1

代码:

#include<iostream>
using namespace std;
int main() {
	int n;
	while (cin >> n) {
		int ans = 1;
		for (int i = 0; i < n; i++) {
			int num; cin >> num;
			if (num & 1) ans *= num;
		}
		cout << ans << endl;
	}
	return 0;
}

8. 平方和与立方和(HDU2007)

思路:遍历判断奇偶

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	int m, n;
	while ((scanf("%d %d", &m, &n) != EOF)) {
		if(n<m) swap(m,n);
		long long ans1 = 0, ans2 = 0;
		for (long long i = m; i <= n; i++) {
			if (i & 1) ans2 += (i * i * i);
			else ans1 += (i * i);
		}
		cout << ans1 << " " << ans2 << endl;
	}
	return 0;
}

9. 数值统计(HDU2008)

思路:判断正负

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	while (cin >> n && n) {
		int a = 0, b = 0, c = 0;
		while (n--) {
			float num; cin >> num;
			if (num < 0) a++;
			else if (num == 0) b++;
			else c++;
		}
		cout << a << ' ' << b << ' ' << c << endl;
	}
	return 0;
}

10. 求数列的和(HDU2009)

思路:将数列的第一项n 不断开平方根,同时ans不断加上n

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	double n, m;
	while (cin >> n >> m) {
		double ans = 0.0;
		while (m--) {
			ans += n;
			n = sqrt(n);
		}
		cout << fixed << setprecision(2) << ans << endl;
	}
	return 0;
}

11. 水仙花数(HDU2010)

思路:数的分解,将数的每一位分解出来,再开三次方。(详见代码)

代码:

#include<bits/stdc++.h>
using namespace std;
bool ishua(int num) {
    // %10表示各位,/10%10表示十位...
	if (num == (pow(num % 10, 3) + pow(num / 10 % 10, 3) + pow(num / 100 % 10, 3))) return true;
	else return false;
}
int main() {
	int m, n;
	while (cin >> m >> n) {
        //因格式要求,flag用来判断是否是第一个遇见的水仙花数,来控制空格的输出
        //同时flag用来判断有没有遇见过水仙花数,来控制“no”的输出
		int flag = false;
		for (int i = m; i <= n; i++) {
			if (ishua(i)) {
				if (!flag) {
					cout << i; flag = true;
				}
				else {
					cout << " " << i;
				}
			}
		}
		if (!flag) cout << "no" << endl;
        else cout<<endl;  //记得换行
	}
	return 0;
}

12. 多项式求和(HDU2011)

思路:模拟多项式,通过i的奇偶判断加减

代码:

#include<bits/stdc++.h>
using namespace std;
double f(int n) {
	double ans = 0.0;
	double first = 1;
	for (int i = 1; i <= n; i++) {
		if (i & 1) ans += (first / i);
		else ans -= (first / i);
	}
	return ans;
}
int main() {
	int t; cin >> t;
	while (t--) {
		int n; cin >> n;
		cout << fixed << setprecision(2) << f(n) << endl;
	}
	return 0;
}

13. 素数判定(HDU2012)

思路:判断素数:首先1不是素数,2是素数。然后遍历2到sqrt(num),如果num能整除其中的某一个数,那么它就不是素数。否则是素数。

代码:

#include<bits/stdc++.h>
using namespace std;
bool isprime(int num) {
	if (num == 1) return false;
	if (num == 2) return true;
	for (int i = 2; i <= sqrt(num); i++) {
		if (num % i == 0) return false;
	}
	return true;
}
bool ok(int x, int y) {
	for (int i = x; i <= y; i++) {
		int ans = i * i + i + 41;
		if (!isprime(ans)) return false;
	}
	return true;
}
int main() {
	int x, y;
	while (cin >> x >> y &&(x||y)) {
		if (ok(x, y)) cout << "OK" << endl;
		else cout << "Sorry" << endl;
	}
	return 0;
}

14. 蟠桃记(HDU2013)

思路:这道题要逆着推答案,最后一天有1个桃子,那么倒数第二天有(1+1)*2个桃子,倒数第三天有((1+1)*2+1)*2个桃子。循环n-1次,因为第一天到第n-1天才吃了桃子,第n天没有吃桃子,只是告诉了我们那天的桃子个数。

代码:

#include<bits/stdc++.h>
using namespace std;
int f(int n) {
	int ans = 1;
	for (int i = 2; i <= n; i++) {
		ans = (ans + 1) * 2;
	}
	return ans;
}
int main() {
	int n; 
	while (cin >> n) {
		cout << f(n) << endl;
	}
	return 0;
}

15. 青年歌手大奖赛_评委会打分(HDU2014)

思路:找到最大最小值,减去再除n-2

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	while (cin >> n) {
		double sum = 0, maxx = -1, minn = 0x3f3f3f3f;
		for (int i = 0; i < n; i++) {
			double num; cin >> num;
			sum += num;
			if (num > maxx) maxx = num;
			if (num < minn) minn = num;
		}
		cout << fixed << setprecision(2) << (sum - maxx - minn) / (n - 2) << endl;
	}
	return 0;
}

16. 偶数求和(HDU2015)

思路:设一个计数器k,每次sum加数的时候,k++,k加到m的时候输出阶段性答案(注意空格处理),然后k归零。最后判断k是否大于零,以判断是否存在最后的剩余项

代码:

#include<bits/stdc++.h>
using namespace std;
void f(int n, int m) {
	int sum = 0, k = 0;
	for (int i = 2; i <= 2 * n; i += 2) {
		sum += i; k++;
		if (k == m) {
            //空格处理
			if(i==2*n) cout<<sum/m;
			else cout << sum / m << " ";
			sum = 0;
			k = 0;
		}
	}
	if (k > 0) {
		cout << sum / k ;
	}
}
int main() {
	int n, m;
	while (cin >> n >> m) {
		f(n, m);
		cout << endl;
	}
	return 0;
}

17. 数据的交换输出(HDU2016)

思路:找到最小的数,记录它的下标,最后与第一个数交换即可

代码:

#include<bits/stdc++.h>
using namespace std;
int num[105];
int main() {
	int n;
	while (cin >> n && n) {
		int minn = 0x3f3f3f3f;
		int minn_id = 0;
		for (int i = 0; i < n; i++) {
			cin >> num[i];
			if (num[i] < minn) {
				minn = num[i];
				minn_id = i;
			}
		}
		swap(num[0],num[minn_id]);
		for (int i = 0; i < n; i++) {
			if (i == 0) cout << num[0];
			else cout << " " << num[i];
		}
		cout << endl;
	} 
	return 0;
}

18. 字符串统计(HDU2017)

思路:判断数字

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		int cnt = 0;
		string s; cin >> s;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] >= '0' && s[i] <= '9') cnt++;
		}
		cout << cnt << endl;
	}
	return 0;
}

19. 母牛的故事(HDU2018)

思路:动态规划,初始第一年的牛 1头(这头牛已经具有生育能力,可以理解为它岁数已经>=4),第二年的牛 2头,第三年的牛 3头。然后根据递推方程

a[i]=a[i-1]+a[i-3] 也就是今年的牛是去年的牛数量的基础上加上三年前之前的牛(也就是岁数>=4的牛)生出的新牛数量(这些新牛数量刚好就是这些大岁数的牛的数量,因为一头成熟的牛 每年必生且只生 一头小牛)

代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int i,n;
    int a[60];
    a[1]=1;a[2]=2;a[3]=3;
    for(i=4;i<56;i++)
    {
        a[i]=a[i-1]+a[i-3];
    }
    while(scanf("%d",&n)!=EOF && n)
    {
        printf("%d\n",a[n]);
    }
    return 0;
}

20. 数列有序!(HDU2019)

思路:边输入边输出,如果m大于当前数,就输出当前数;如果m小于当前数,就将m和当前数一起输出。并将m设为无穷大,防止重复输出。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, m; 
	while (cin >> n >> m&&n&&m) {
		for (int i = 0; i < n; i++) {
			int num; cin >> num;
			if (m != 0x3f3f3f3f && m <= num) {
				cout << m << " " << num ;
				m = 0x3f3f3f3f;
			}
			else {
				cout << num ;
			}
			if(i!=n-1) cout<<" ";
		}
		cout << endl;
	}
	return 0;
}

21. 绝对值排序(HDU2020)

思路:使用STL sort自定义排序算法(超级方便,不会的可以自行搜索学习qwq)

代码:

#include<bits/stdc++.h>
using namespace std;
int num[105];
bool cmp(int a, int b) {
	return abs(a) > abs(b); //如果a的绝对值大于b的绝对值,返回true,让a排在b前面
}
int main() {
	int n; 
	while (cin >> n && n) {
		for (int i = 0; i < n; i++) {
			cin >> num[i];
		}
		sort(num, num + n, cmp);
		for (int i = 0; i < n; i++) {
			if (i == 0) cout << num[i];
			else cout << " " << num[i];
		}
		cout << endl;
	}
	return 0;
}

22. 发工资咯:)(HDU2021)

思路:贪心,想要最少的钞票数,那钞票的面值肯定要越大越好。所以对于每个人的工资,先给他他能达到的最大面值的钱。可以通过int除法去除小数。对于工资45的老师,50面值太多了,所以先考虑10面值,给多少张10面值的钱呢。可以通过int除法:45/10=4 得知。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	while (cin >> n && n) {
		int ans = 0;
		while (n--) {
			int salary; cin >> salary;
			while (salary > 0) {
				if (salary >= 100) {
					ans += (salary / 100);
					salary -= (salary / 100) * 100;
				}
				else if (salary >= 50) {
					ans += (salary / 50);
					salary -= (salary / 50) * 50;
				}
				else if (salary >= 10) {
					ans += (salary / 10);
					salary -= (salary / 10) * 10;
				}
				else if (salary >= 5) {
					ans += (salary / 5);
					salary -= (salary / 5) * 5;
				}
				else if (salary >= 2) {
					ans += (salary / 2);
					salary -= (salary / 2) * 2;
				}
				else {
					ans += salary;
					salary = 0;
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}

23. 海选女主角(HDU2022)

思路:用row,col,MAX实时记录更新的数据即可

代码:

#include<bits/stdc++.h>
using namespace std;
int MM[105][105];
int main() {
	int n, m;
	while (cin >> n >> m) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				cin >> MM[i][j];
			}
		}
		int row, col, MAX = -1;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				if (abs(MM[i][j]) > MAX) {
					MAX = abs(MM[i][j]);
					row = i, col = j;
				}
			}
		}
		cout << row << " " << col << " " << MM[row][col] << endl;
	}
	return 0;
}

24. 求平均成绩(HDU2023)

思路:用二维数组,二维数组稍微开大点,这样就可以用后面的空间,存同一行或同一列的值。

因为scanf/printf较快,用较慢的cin/cout会WA!

代码:

#include<bits/stdc++.h>
using namespace std;
double score[55][10];
int main() {
	int n, m;
	while (cin >> n >> m) {
		memset(score, 0, sizeof(score));
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				scanf("%lf", &score[i][j]);
				score[i][m] += score[i][j];
				score[n][j] += score[i][j];
			}
			score[i][m] /= m;
		}
		for (int j = 0; j < m; j++) score[n][j] /= n;
		int exceed = 0;
		for (int i = 0; i < n; i++) {
			int flag = true;
			for (int j = 0; j < m; j++) {
				if (score[i][j] < score[n][j]) flag = false;
			}
			if (flag) exceed++;
		}
		for (int i = 0; i < n; i++) {
			if(i!=0) cout<<" ";
			printf("%.2lf", score[i][m]);
		}
		cout << '\n';
		for (int j = 0; j < m; j++) {
			if(j!=0) cout<<" ";
			printf("%.2lf", score[n][j]);
		}
		cout << '\n';
		printf("%d\n\n", exceed);
	}
	return 0;
}

25. C语言合法标识符(HDU2024)

思路:C语言标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。

代码:

#include<bits/stdc++.h>
using namespace std;
bool legal(string s) {
	if (isdigit(s[0])) return false;
	for (int i = 0; i < s.size(); i++) {
		if (!isalnum(s[i]) && s[i] != '_') return false;
	}
	return true;
}
int main() {
	int t; cin >> t;
	getchar();
	while (t--) {
		string s;
		getline(cin, s);
		if (legal(s)) cout << "yes" << endl;
		else cout << "no" << endl;
	}
	return 0;
}

26. 查找最大元素(HDU2025)

思路:MAX记录最大值

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	string s;
	while (getline(cin, s)) {
		int MAX = -1;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] - 'a' > MAX) MAX = s[i] - 'a';
		}
		for (int i = 0; i < s.size(); i++) {
			if (s[i] - 'a' == MAX) cout << s[i] << "(max)";
			else cout << s[i];
		}
		cout << endl;
	}
	return 0;
}

27. 首字母变大写(HDU2026)

思路:toupper函数,printf("%c") 格式化输出

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	string s;
	while (getline(cin, s)) {
		for (int i = 0; i < s.size(); i++) {
			if (i == 0) printf("%c", toupper(s[i]));
			else if (i != 0 && s[i - 1] == ' ') printf("%c", toupper(s[i]));
			else cout << s[i];
		}
		cout << endl;
	}
	return 0;
}

28. 统计元音(HDU2027)

思路:五个计数器,注意输出格式控制

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	getchar();
	while (t--) {
		string s;
		getline(cin, s);
		int a = 0, b = 0, c = 0, d = 0, e = 0;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == 'a') a++;
			else if (s[i] == 'e') b++;
			else if (s[i] == 'i') c++;
			else if (s[i] == 'o') d++;
			else if (s[i] == 'u') e++;
		}
		cout << "a:" << a << endl;
		cout << "e:" << b << endl;
		cout << "i:" << c << endl;
		cout << "o:" << d << endl;
		cout << "u:" << e << endl;
		if (t != 0) cout << endl;
	}
	return 0;
}

29. Lowest Common Multiple Plus(HDU2028)

思路:gcd函数求两个数的最小公倍数,然后要求三个数的最小公倍数的话,可先求前两个的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,以此类推。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int gcd(int a, int b) {
	return b == 0 ? a : gcd(b,a%b);
}
signed main() {
	int n; 
	while (cin>>n) {
		int a[105] = { 0 };
		for (int i = 0; i < n; i++) cin >> a[i];
		for (int i = 0; i < n - 1; i++) {
			int g = gcd(a[i], a[i + 1]);
			a[i + 1] = (a[i] * a[i + 1]) / g;
		}
		cout << a[n - 1] << endl;
	}
	return 0;
}

30. Palindromes _easy version(HDU2029)

思路:左右对比回文串

代码:

#include<bits/stdc++.h>
using namespace std;
bool is(string s) {
	int l = 0, r = s.size() - 1;
	while (l < r) {
		if (s[l] != s[r]) return false;
		l++, r--;
	}
	return true;
}
int main() {
	int t; cin >> t;
	getchar();
	while (t--) {
		string s; 
		getline(cin, s);
		if (is(s)) cout << "yes" << endl;
		else cout << "no" << endl;
	}
	return 0;
}

31. 汉字统计(HDU2030)

思路:汉字码是小于0。并且一个汉字占两个字节。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	getchar();
	while (t--) {
		string s;
		getline(cin, s);
		int cnt = 0;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] < 0) cnt++;
		}
		cout << cnt / 2 << endl;
	}
	return 0;
}

32. 进制转换(HDU2031)

思路:进制转换经典例题

资料:十进制转换成十六进制

代码:

#include<bits/stdc++.h>
using namespace std;
string turn(int num, int radix) {
	stack<char> st;
	while (num > 0) {
		int temp = num % radix;
		if (temp >= 10) st.push(temp - 10 + 'A');
		else st.push(temp + '0');
		num /= radix;
	}
	string ans = "";
	while (!st.empty()) {
		ans += st.top();
		st.pop();
	}
	return ans;
}
int main() {
	int num, radix;
	while (cin >> num >> radix) {
		if (num < 0) {
			cout << '-';
			num = -num;
		}
		cout << turn(num, radix) << endl;
	}
	return 0;
}

33. 杨辉三角(HDU2032)

思路:先预处理出30行的杨辉三角,再直接用就行。某行的杨辉三角规律,第一列与最后一列为1,其他的值为上一行的上一列的值加上一行的同一列的值。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[35][35];
void pre() {
	a[0][0] = 1;
	for (int i = 1; i <= 29; i++) {
		for (int j = 0; j <= i; j++) {
			if (j == 0 || j == i) a[i][j] = 1;
			else a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
		}
	}
}
int main() {
	pre();
	int n;
	while (cin >> n) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j <= i; j++) {
				if (j != 0) cout << " ";
				cout << a[i][j];
			}
			cout << endl;
		}
		cout << endl;
	}
	return 0;
}

34. 人见人爱A+B(HDU2033)

思路:取余与int除法的应用

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		int ah, am, as, bh, bm, bs;
		cin >> ah >> am >> as >> bh >> bm >> bs;
		int cs = (as + bs) % 60;
		int cm = (am + bm + (as + bs) / 60) % 60;
		int ch = ah + bh + (am + bm + (as + bs) / 60) / 60;
		cout << ch << " " << cm << ' ' << cs << endl;
	}
	return 0;
}

35. 人见人爱A-B(HDU2034)

思路:使用set可以自动排序,并且可以按值删除;

资料:set常见用法详解

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, m;
	set<int> se;
	while (cin >> n >> m && (n||m)) {
		
		se.clear();
		for (int i = 0; i < n; i++) {
			int num; cin >> num;
			se.insert(num);
		}
		for (int i = 0; i < m; i++) {
			int num; cin >> num;
			if (se.find(num) != se.end()) se.erase(num);
		}
		if (se.size() == 0) cout << "NULL" << endl;
		else {
			for (auto it = se.begin(); it != se.end(); it++) cout << *it << " ";
			cout << endl;
		}
	}
	return 0;
}

36. 人见人爱A^B(HDU2035)

思路:因为数可能会特别大,所以一步步次方的同时要一步步对1000取余,聚焦于后三位数字

代码:

#include<bits/stdc++.h>
using namespace std;
int f(int n, int m) {
	int ans = 1;
	while (m--) {
		ans *= n;
		ans %= 1000;
	}
	return ans;
}
int main() {
	int n, m;
	while (cin >> n >> m && (n || m)) {
		cout << f(n, m) << endl;
	}
	return 0;
}

37. 改革春风吹满地(HDU2036)

思路:叉乘,这题的多边形好像都是中点在原点,或则卡轴三角形,所以简化了向量的获得过程

参考:叉乘

代码:

#include<bits/stdc++.h>
using namespace std;
struct point {
	int x, y;
}p[105];
int main() {
	int n;
	while (cin >> n && n) {
		for (int i = 0; i < n; i++) {
			cin >> p[i].x >> p[i].y;
		}
		p[n].x = p[0].x, p[n].y = p[0].y;
		int area = 0;
		for (int i = 0; i < n; i++) {
			area += (p[i].x * p[i + 1].y - p[i].y * p[i + 1].x);
		}
		printf("%.1lf\n", area / (double)2);
	}
	return 0;
}

38. 今年暑假不AC(HDU2037)

思路:贪心,将所有的节目按结束时间从小到大排序;初始化当前进行到的时间点(prelast,上一个能看的节目的结束时间,初始化为0),只要被判断的这个节目开始的时间>=当前的时间,就把这个节目算进去,然后更新prelast。

代码:

#include<bits/stdc++.h>
using namespace std;
struct pro {
	int s, e;
}p[105];
bool cmp(pro a, pro b) {
	return a.e < b.e;
}
int main() {
	int n;
	while (cin >> n && n) {
		for (int i = 0; i < n; i++) {
			cin >> p[i].s >> p[i].e;
		}
		sort(p, p + n, cmp);
		int prelast = 0, ans = 0; //prelast表示上一个能看的节目的结束时间
		for (int i = 0; i < n; i++) {
			if (p[i].s >= prelast) {
				ans++;
				prelast = p[i].e;
			}
		}
		cout << ans << endl;
	}
	return 0;
}

39. 三角形(HDU2039)

思路:两边之和大于第三边,记得用double!!!(我前面define了)

代码:

#include<bits/stdc++.h>
#define int double
using namespace std;
bool is(int a, int b, int c) {
	if (a == 0 || b == 0 || c == 0) return false;
	if (a + b <= c || a + c <= b || b + c <= a) return false;
	return true;
}
signed main() {
	int t; cin >> t;
	while (t--) {
		int a, b, c; cin >> a >> b >> c;
		if (is(a, b, c)) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

40. 亲和数(HDU2040)

思路:求真约数咯!

代码:

#include<bits/stdc++.h>
using namespace std;
int yue(int num) {
	int ans = 1; //真约数一定有 1
	for (int i = 2; i <= sqrt(num); i++) {
		if (i != sqrt(num) && num % i == 0) ans += (i + (num / i));
		if (i == sqrt(num) && num % i == 0) ans += sqrt(num);
	}
	return ans;
}
int main() {
	int t; cin >> t;
	while (t--) {
		int num1, num2; cin >> num1 >> num2;
		if (yue(num1) == num2 && yue(num2) == num1) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

41. 超级楼梯(HDU2041)

思路:动态规划,当前的方法等于上一级的方法加上两级的方法

代码:

#include<bits/stdc++.h>
using namespace std;
int dp[55];
void pre() {
	dp[2] = 1;
	dp[3] = 2;
	for (int i = 4; i <= 40; i++) {
		dp[i] = dp[i - 1] + dp[i - 2];
	}
}
int main() {
	pre();
	int t; cin >> t;
	while (t--) {
		int M; cin >> M;
		cout << dp[M] << endl;
	}
	return 0;
}

42. 不容易系列之二(HDU2042)

思路:先预处理,然后动态规划,从后往前算

代码:

#include<bits/stdc++.h>
using namespace std;
int dp[35];
void pre() {
	dp[0] = 3;
	for (int i = 1; i <= 30; i++) {
		dp[i] = (dp[i - 1] - 1) * 2;
	}
}
int main() {
	pre();
	int t; cin >> t;
	while (t--) {
		int n; cin >> n;
		cout << dp[n] << endl;
	}
	return 0;
}

43. 密码(HDU2043)

思路:各种函数快捷判断

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		string s; cin >> s;
		int a = 0, b = 0, c = 0, d = 0;
		for (int i = 0; i < s.size(); i++) {
			if (isupper(s[i])) a = 1;
			else if (islower(s[i])) b = 1;
			else if (isdigit(s[i])) c = 1;
			else d = 1;
		}
		if ((a + b + c + d >= 3) && s.size() >= 8 && s.size() <= 16) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

44. 一只小蜜蜂...(HDU2044)

思路:根据b-a的差值为关键进行动态规划,就是将a变成1,b变成b-a+1,这样就将起点都变成1了,方便运算。从1到达5的路线数=从1到达3的路线数+从1到达4的路线数。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[55];
void pre() {
	dp[0] = 1;
	dp[1] = 1;
	for (int i = 2; i <= 50; i++) {
		dp[i] = dp[i - 1] + dp[i - 2];
	}
}
signed main() {
	pre();
	int t; cin >> t;
	while (t--) {
		int a, b; cin >> a >> b;
		cout << dp[b - a] << endl;
	}
	return 0;
}

45. 不容易系列之(3)―― LELE的RPG难题(HDU2045)

思路:

n个格子只需要先涂n-1个,再涂一个就好。

1.第一个和第n-1个不同色的情况,,那么第n个只有一种涂法,所以第一种情况有1*a[n-1]种

2.第1个和第n-1个同色,那么第n个有两种涂法,而第1个和第n-1个同色的种数就是a[n-2]*1种,所以第二种情况有a[n-2]*1*2种

所以a[n]=a[n-1]+2*a[n-2]

n=3是特例,因为当n=3时是没有第二种情况的

代码:

#include<bits/stdc++.h>
using namespace std;
long long a[60];
void pre() {
	a[1] = 3, a[2] = 6, a[3] = 6;
	for (int i = 4; i <= 50; i++) {
		a[i] = a[i - 1] + 2 * a[i - 2];
	}
}
int main() {
	pre();
	int n;
	while (cin >> n) {
		cout << a[n] << endl;
	}
	return 0;
}

46. 骨牌铺方格(HDU2046)

思路:动态规划

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[55];
void pre() {
	dp[1] = 1, dp[2] = 2;
	for (int i = 3; i <= 50; i++) {
		dp[i] = dp[i - 1] + dp[i - 2];
	}
}
signed main() {
	pre();
	int n;
	while (cin >> n) {
		cout << dp[n] << endl;
	}
	return 0;
}

47. 阿牛的EOF牛肉串(HDU2047)

思路:杭电ACM 2047 - 阿牛的EOF牛肉串(解题思路与详细分析)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[50];
void pre() {
	dp[1] = 3, dp[2] = 8;
	for (int i = 3; i <= 40; i++) {
		dp[i] = 2 * dp[i - 1] + 2 * dp[i - 2];
	}
}
signed main() {
	pre();
	int n; 
	while (cin >> n) {
		cout << dp[n] << endl;
	}
	return 0;
}

48. 神、上帝以及老天爷(HDU2048)

思路:神,上帝以及老天爷_昔我往矣wood的博客-程序员宅基地_神、上帝以及老天爷

代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,j,n,a;
    double g,f[100];
    scanf("%d",&n);
    for(j=0;j<n;j++)
    {
        g=1;
        scanf("%d",&a);
        for(i=1;i<=a;i++)
        {
            g*=i;
        }
        f[1]=0;f[2]=1;f[3]=2;
        for(i=3;i<=20;i++)
        {
            f[i]=(i-1)*(f[i-1]+f[i-2]);
        }
        printf("%.2lf%%\n",f[a]/g*100);
    }
    return 0;
}

49. 不容易系列之(4)――考新郎(HDU2049)

思路:[ 不容易系列之(4)——考新郎]+(错排的简单理解+改进计算组合数)_丿繁年的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int f[105];
int C(int n, int m) {
	int ans = 1;
	if (m < n - m) m = n - m;
	for (int i = m + 1; i <= n; i++) {
		ans *= i;
	}
	for (int i = 1; i <= n - m; i++) {
		ans /= i;
	}
	return ans;
}
void pre() {
	f[1] = 0, f[2] = 1;
	for (int i = 3; i <= 20; i++) {
		f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
	}
}
signed main() {
	pre();
	int t; cin >> t;
	while (t--) {
		int n, m; cin >> n >> m;
		cout << f[m] * C(n, m) << endl;
	}
	return 0;
}

50. 折线分割平面(HDU2050)

思路:折线分割平面(图文解析)_扣子不会飞的博客-程序员宅基地_折线分割平面

代码:

#include<bits/stdc++.h>
using namespace std;
int f(int m) {
	int sum = 0;
	for (int i = 1; i <= m - 2; i++) sum += i;
	sum += 2 * m;
	return sum;
}
int main() {
	int t; cin >> t;
	while (t--) {
		int n; cin >> n;
		cout << f(2 * n) - 2 * n << endl;
	}
	return 0;
}

51. Bitset(HDU2051)

思路:十进制转二进制

代码:

#include<bits/stdc++.h>
using namespace std;
void f(int n) {
	stack<int> st;
	while (n > 0) {
		st.push(n % 2);
		n /= 2;
	}
	while (!st.empty()) {
		printf("%d",st.top());
		st.pop();
	}
}
int main() {
	int n;
	while (~scanf("%d",&n)) {
		f(n);
        puts("");
	}
	return 0;
}

52. Picture(HDU2052)

思路:模拟

代码:

#include<stdio.h>
#include<string.h>
 
int main(void) {
  int i, j, w, h;
  char ch[100][100];
 
  while (scanf("%d %d", &w, &h) != EOF) {
 
    memset(ch, ' ', 100 * 100*sizeof(char));
    ch[0][0] = '+';
    ch[0][w+1] = '+';
    ch[h+1][0] = '+';
    ch[h+1][w+1] = '+';
 
    for (i = 1; i <= w; i++) {
      ch[0][i] = '-';
      ch[h+1][i] = '-';
    }
 
    for (j = 1; j <= h; j++) {
      ch[j][0] = '|';
      ch[j][w+1] = '|';
    }
    for (i = 0; i < h+2; i++) {
      for (j = 0; j < w+2; j++)
        printf("%c", ch[i][j]);
      putchar('\n');
    }
  putchar('\n');
  }
  
  return 0;
}

53. Switch Game(HDU2053)

思路:看某个数的因子有几个,就知道操作了几次

代码:

#include<bits/stdc++.h>
using namespace std;
bool f(int n) {
	int sum = 0;
	for (int i = 1; i <= n; i++) {
		if (n % i == 0) sum++;
	}
	return !(sum % 2 == 0);
}
int main() {
	int n;
	while (cin >> n) {
		cout << f(n) << endl;
	}
	return 0;
}

54. A == B ?(HDU2054)

思路:用字符串,消除前导零和小数后缀零

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	string a, b; 
	while (cin >> a >> b) {
		if (a.find('.')!=-1 && a[a.size() - 1] == '0') {
			int id = a.size() - 1;
			while (id >= 0 && a[id] != '.' && a[id] == '0') {
				a.pop_back();
				id--;
			}
		}
		if (a[a.size() - 1] == '.') a.pop_back();
		while (a.size() && a[0] == '0') a.erase(a.begin());
		if (b.find('.')!=-1 && b[b.size() - 1] == '0') {
			int id = b.size() - 1;
			while (id >= 0 && b[id] != '.' && b[id] == '0') {
				b.pop_back();
				id--;
			}
		}
		if (b[b.size() - 1] == '.') b.pop_back();
		while (b.size() && b[0] == '0') b.erase(b.begin());
		if (a == b) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

55. An easy problem(HDU2055)

思路:字符差变数字

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		char a; int b; cin >> a >> b;
		int sum = 0;
		if (islower(a)) sum -= (a - 'a' + 1);
		else sum += (a - 'A' + 1);
		cout << sum + b << endl;
	}
	return 0;
}

56. Rectangles(HDU2056)

思路:检测重叠部分

代码:

#include <stdio.h>
 
double min(double x1,double x2)
{
    if(x1<x2)
        return x1;
    else
        return x2;
}
double max(float x1,double x2)
{
    if(x1>x2)
        return x1;
    else
        return x2;
}
void change(double *a ,double *b)
{
	double temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
    double x1,x2,x3,x4,y1,y2,y3,y4,s;
    while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
    {
		if(x1>x2) change(&x1,&x2);
		if(x3>x4) change(&x3,&x4);
		if(y1>y2) change(&y1,&y2);
		if(y3>y4) change(&y3,&y4);
        if((x4>x1)&&(y4>y1)&&(x3<x2)&&(y3<y2))
        {
            s=(min(x2,x4)-max(x1,x3))*(min(y2,y4)-max(y1,y3));
            printf("%.2lf\n",s);
        }
        else
            printf("0.00\n");
        
        
    }
    return 0;
}

57. A + B Again(HDU2057)

思路:使用格式化输入输出,64位整数

代码:

#include<bits/stdc++.h>
using namespace std; 
int main()
{
   __int64 a,b,sum;
while(scanf("%I64X %I64X",&a,&b) != EOF)
{
    sum = a + b;
    if(sum < 0)
    {
        sum = fabs(sum);
        printf("-%I64X\n",sum);
    }
    else
        printf("%I64X\n",sum);
}
return 0;
}

58. The sum problem(HDU2058)

思路:【杭电oj】2058 - The sum problem(高斯公式)_wyg1997的博客-程序员宅基地

代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
	long long n,m;
	long long a,b;
	while (~scanf("%lld %lld",&n,&m) && (n || m))
	{
		for (int i = sqrt((double)(2*n)) ; i > 0 ; i--)
		{
			if ((2 * m) % i == 0 && ((2 * m / i) + i - 1) % 2 == 0)
			{
				a = ((2 * m / i) + i - 1) / 2;
				b = 2 * m / i - a;
				if (a > b)
					swap(a,b);
				if (a > 0)
					printf ("[%d,%d]\n",a,b);
			}
		}
		printf ("\n");
	}
	return 0;
}

59. 龟兔赛跑(HDU2059)

思路:HDU 2059-龟兔赛跑_凉哈哈的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 105;
int h[N];
double dp[N];
int main() {
	int l;
	while (cin >> l) {
		int n, c, t; cin >> n >> c >> t;
		int vr, vt1, vt2; cin >> vr >> vt1 >> vt2;
		for (int i = 1; i <= n; i++) cin >> h[i];
		h[0] = 0, h[n + 1] = l;
		dp[0] = 0;
		double tu = l * 1.0 / vr;
		for (int i = 1; i <= n + 1; i++) {
			double minx = INF;
			for (int j = 0; j < i; j++) {
				int dis = h[i] - h[j];
				double time;
				if (c >= dis) time = dis * 1.0 / vt1;
				else time = (c * 1.0 / vt1) + (dis - c) * 1.0 / vt2;
				if (j != 0) time += t;
				if (dp[j] + time < minx) minx = dp[j] + time;
			}
			dp[i] = minx;
		}
		if (dp[n + 1] > tu) cout << "Good job,rabbit!" << endl;
		else cout << "What a pity rabbit!" << endl;
	}
	return 0;
}

60. Snooker(HDU2060)

参考:HDU2060 Snooker【水题】_ITCharge的博客-程序员宅基地

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
 
int main()
{
    int N;
    cin >> N;
    while(N--)
    {
        int ball,score1,score2;
        cin >> ball >> score1 >> score2;
        if(ball > 6)
        {
            score1 += (ball-6)*8+27;
        }
        else
        {
            int i = 7;
            while(ball--)
            {
                score1 += i;
                i--;
            }
        }
        if(score1 >= score2)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
 
    return 0;
}

61. Treasure the new start, freshmen!(HDU2061)

思路:算GPA

代码:

#include <cstdio>
#include <iostream>
#include <string> 

using namespace std;

int main()
{
	int N;
	int j = 0;	
	cin >> N;
	while(N--)
	{
		string name;
		double credits,score;
		double mem = 0, sum = 0;
		int flag = 1, K;
		
		cin >> K;
		while( K-- ){
			cin >> name >> credits >> score;
			
			if(score < 60)
				flag = 0;
			
			mem+=credits*score;
			sum+=credits;	
		}


		if(flag)
			printf("%.2lf\n",mem/sum);
		else
			printf("Sorry!\n");
			
		if( N )
			printf("\n");
	}
	
	return 0;
}

62. Subset sequence(HDU2062)

参考:HDU 2062——Subset sequence(最详细的解释,看不懂你找我)_unique_pursuit的博客-程序员宅基地

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#include<cmath>
#include<string>

using namespace std;

const int maxn=25;
int n;//n:An
long long m;//   m:第m个子集序列。
long long g[maxn]={0}; //代表的就是g(n),即第n个分组中每组的子集数。
int num[maxn];   //存放分组后的首元素。
long long  i;//循环控制变量
long long  temp;//临时变量,代表所求m位于的分组

int main()
{
	for(i=1;i<=maxn;i++)
		g[i]=(i-1)*g[i-1]+1; //打g(n)表,供下面使用
	while(cin>>n>>m)
	{
		for(i=0;i<=maxn;i++)
			num[i]=i;
		while(n>0&&m>0)
		{
			temp=(m-1)/g[n]+1; //确定在第几个分组
		    if(temp>0)//说明所求第m个子集位于第temp个分组。
			{
				cout<<num[temp];
				for(i=temp;i<=n;i++)
				{
					num[i]=num[i+1];//我们将其首元素从中剔除,继续分组寻找下一个。
				}
				m=m-((temp-1)*g[n]+1);//要更新m的值,因为我们已经剔除了前面(temp-1)个分组,加1是因为序号是从1开始。
				if(m!=0)cout<<" ";
				else cout<<endl;
			}
			n--;    //剔除元素,接下来就是在An-1中寻找第m个子集序列。
		}
	}
	system("pause");
    return 0;
}


63. 过山车(HDU2063)

参考:【例题记录】匈牙利算法求二分图的最大匹配_Ctrl AC的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int f[N][N], used[N], match[N];
int e, n, m;
bool DFS(int left) {
	for (int i = 1; i <= m; i++) {
		if (f[left][i] && !used[i]) {
			used[i] = true;
			if (!match[i] || DFS(match[i])) {
				match[i]=left;
				return true;
			}
		}
	}
	return false;
}
int main() {
	while (cin >> e , e) {
		cin >> n >> m;
		memset(match, 0, sizeof match);
		memset(f, 0, sizeof f);
		for (int i = 1; i <= e; i++) {
			int x, y; cin >> x >> y;
			f[x][y] = true;
		}
		int cnt = 0;
		for (int i = 1; i <= n; i++) {
			memset(used, 0, sizeof used);
			if (DFS(i)) cnt++;
		}
		cout << cnt << endl;
	}
	return 0;
}

64. 汉诺塔III(HDU2064)

思路:hdu 2064:汉诺塔III_serendipityLB的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 36;
int f[N];
signed main() {
	f[1] = 2;
	for (int i = 2; i <= 35; i++) {
		f[i] = 3 * f[i - 1] + 2;
	}
	int n;
	while (cin >> n) {
		cout << f[n] << endl;
	}
	return 0;
}

65. "红色病毒"问题(HDU2065)

思路:【组合数学】 红色病毒问题 详解(指数型生成函数+泰勒展开)_Nefu_qky的博客-程序员宅基地

代码:

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
 
long long quickpower(long long base,long long power){
   long long ret=1;
   while(power){
     if(power%2)
        ret=ret*base%100;
     base=base*base%100;
     power/=2;
   }
   return ret;
}
 
int main()
{
   int T;
   while(~scanf("%d",&T)&&T){
      for(int i=1;i<=T;i++){
          long long N;
          scanf("%lld",&N);
          printf("Case %d: %lld\n",i,(quickpower(4,N-1)+quickpower(2,N-1))%100);
      }
      printf("\n");
   }
 
   return 0;
}

66. 一个人的旅行(HDU2066)

思路:HDU2066:一个人的旅行(Dijkstra)_键盘上的舞者的博客-程序员宅基地

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int inf = 1<<30;
 
int T,S,D,n;
int map[1111][1111];
int vis[1111],cast[1111];
int s[1111],e[1111];
 
void Dijkstra()
{
    int i,j,minn,pos;
    memset(vis,0,sizeof(vis));
    vis[0] = 1;
    for(i = 0; i<=n; i++)
        cast[i] = map[0][i];
    for(i = 1; i<=n; i++)
    {
        minn = inf;
        for(j = 1; j<=n; j++)
        {
            if(cast[j]<minn && !vis[j])
            {
                pos = j;
                minn = cast[j];
            }
        }
        vis[pos] = 1;
        for(j = 1; j<=n; j++)
        {
            if(cast[pos]+map[pos][j]<cast[j] && !vis[j])
                cast[j] = cast[pos]+map[pos][j];
        }
    }
}
 
int main()
{
    int i,j,x,y,z,start,end;
    while(~scanf("%d%d%d",&T,&S,&D))
    {
        n = 0;
        for(i = 0; i<1111; i++)
        {
            for(j = 0; j<1111; j++)
                map[i][j] = inf;
            map[i][i] = 0;
        }
        while(T--)
        {
            scanf("%d%d%d",&x,&y,&z);
            n = max(max(n,x),y);
            if(z<map[x][y])
                map[x][y] = map[y][x] = z;
        }
        int minn = inf;
        for(i = 0; i<S; i++)
        {
            scanf("%d",&s[i]);
            map[0][s[i]] = map[s[i]][0] = 0;
        }
        for(i = 0; i<D; i++)
            scanf("%d",&e[i]);
        Dijkstra();
        for(i = 0; i<D; i++)
            minn = min(minn,cast[e[i]]);
        printf("%d\n",minn);
    }
 
    return 0;
}

67. 小兔的棋盘(HDU2067)

思路:HDU2067——小兔的棋盘(迷宫,动态规划,卡特兰数)_一百个Chocolate的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=40;
long long dp[maxn][maxn];
int main()
{
    memset(dp,0,sizeof(dp));
    for(int i=1;i<maxn;i++)
    {
        dp[i][0]=1;
        for(int j=1;j<i;j++)
        {
            dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
        dp[i][i]=dp[i][i-1];
    }
    int k=0;
    int n;
    while(cin>>n&&n!=-1)
    {
        cout<<++k<<" "<<n<<" "<<2*dp[n][n]<<endl;
    }
    return 0;
}

68. RPG的错排(HDU2068)

思路:RPG的错排【错排公式+组合数学】_Wuliwuliii的博客-程序员宅基地

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 28;
int N, mid;
ll f[maxN], ans, jiecheng[maxN];
void pre_did()
{
    f[0] = f[1] = 0;    //当只有0、1的情况的时候不存在错误的排序的可能,所以就是0
    f[2] = 1;   //错误的排序的存在可能
    jiecheng[0] = jiecheng[1] = 1;
    jiecheng[2] = 2;
    for(int i=3; i<maxN; i++)
    {
        f[i] = (i - 1) * (f[i-1] + f[i-2]);
        jiecheng[i] = jiecheng[i-1] * i;
    }
}
ll Cal(int down, int up)
{
    ll ans = 1;
    for(int i=down; i>=down - up + 1; i--) ans *= i;
    for(int i=up; i>1; i--) ans /= i;
    return ans;
}
int main()
{
    pre_did();
    while(scanf("%d", &N) && N)
    {
        mid = N/2;  ans = 0;
        for(int i=0; i<=mid; i++)
        {
            ans += Cal(N, i) * f[i];    //全都答对时的f[0]==0,会丢失一个答案
        }
        printf("%lld\n", ans + 1);
    }
    return 0;
}

69. Coin Change(HDU2069)

思路:Coin Change HDU - 2069 (超详细题解)_林小鹿@的博客-程序员宅基地

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[5] = { 1,5,10,25,50 }; ///表示5种硬币各自的价值 
int dp[110][260];///表示dp[i][v] 用i个硬币凑成价值为v的方法数  
int main()
{
	int n;
	while (cin >> n)
	{
		memset(dp, 0, sizeof(dp)); //初始化dp数组
		dp[0][0] = 1;///边界
		for (int i = 0; i < 5; i++)
		{
			for (int k = 1; k <= 100; k++) //k个硬币
			{
				for (int v = a[i]; v <= n; v++)
				{
					dp[k][v] += dp[k - 1][v - a[i]];//状态转移方程
				}                        
			}
		}
		int ans = 0;
		for (int i = 0; i <= 100; i++)
		{
			ans += dp[i][n];
		}
		cout << ans << endl;
	}
	return 0;
}

70. Fibbonacci Number(HDU70)

思路:斐波那契数

代码:

#include<bits/stdc++.h>
using namespace std;
__int64 fibo[55];
void pre() {
	fibo[0] = 0, fibo[1] = 1;
	for (int i = 2; i <= 50; i++) {
		fibo[i] = fibo[i - 1] + fibo[i - 2];
	}
}
int main() {
	pre();
	int n;
	while (cin >> n && n != -1) cout << fibo[n] << endl;
	return 0;
}

71. Max Num(HDU2071)

思路:HDU-2071 Max Num_springflower02的博客-程序员宅基地

代码:

#include <iostream>

using namespace std;

int main() {
	
	int n;
	cin>>n;
	
	for(int i=0; i<n; i++){
		int m;
		cin>>m;
		double max;
		cin>>max;
		for(int j=1; j<m; j++){
			double tmp;
			cin>>tmp;
			if(tmp>max){
				max = tmp;
			}
		}
		printf("%.2lf\n", max);
	} 
	
	return 0;
}

72. 单词数(HDU2072)

思路:HDU 2072 单词数_ultimater的博客-程序员宅基地

代码:

#include<iostream>
#include<string>
#include<sstream>
#include<set>
 
using namespace std;
 
int main()
{
    string s,w;
    while(getline(cin,s),s!="#")
    {
        istringstream src(s);
        set<string>st;
        while(src>>w)st.insert(w);
        cout<<st.size()<<endl;
    }
    return 0;
}

73. 无限的路(HDU2073)

思路:杭电OJ2073 无限的路(已AC,超详细解释,适合初学者)_HDU-五七小卡的博客-程序员宅基地

代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
double f[210];
double dabiao()//有公式了就先打表一下,就是提前计算好,下面代入点(x,y)的时候可以直接调用
{
	f[1]=1;
	for(int i=2;i<=200;i++)
	{
		double m,n;
		m=sqrt((i-1)*(i-1)+(i-1)*(i-1));
		n=sqrt(i*i+(i-1)*(i-1));
		f[i]=f[i-1]+m+n;
	}//有不明白的见上面解析
	return 0;
}

double distance(int x,int y)
{
	double d=0;
	d=f[x+y]+x*sqrt(2.0);
	return d;
}//点(x,y)到原点的距离公式

int main()
{
	int x1,y1,x2,y2,n;
	double d1,d2,d;
	dabiao();
	while(scanf("%d",&n)!=EOF)
	{
	while(n--)
	{
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		d1=distance(x1,y1);
		d2=distance(x2,y2);
		d=d1-d2;
		if(d<0) d=-d;
		printf("%.3lf\n",d);
	}
	}
	return 0;
}

74. 叠筐(HDU2074)

思路:一层层分析,注意格式

代码:

#include<bits/stdc++.h>
using namespace std;
void modify(char mp[][85], int level, int n, char now) {
	for (int j = level; j <= n - level + 1; j++) mp[level][j] = now, mp[n - level + 1][j] = now;
	for (int i = level; i <= n - level + 1; i++) mp[i][level] = now, mp[i][n - level + 1] = now;
}
int main() {
	int n; char cen, out;
	bool flag = false;
	while (cin >> n >> cen >> out) {
		if (flag) {
			puts("");
		}
		else flag = true;
		char mp[85][85];
		int level = (n + 1) / 2;
		int now = level & 1 ? out : cen;
		for (int i = 1; i <= level; i++) {
			now = now == cen ? out : cen;
			modify(mp, i, n, now);
		}
		if (n == 1) {
			cout << cen << endl ;
		}
		else {
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) {
					if ((i == 1 && j == 1) || (i == 1 && j == n) || (i == n && j == 1) || (i == n && j == n)) cout << ' ';
					else cout << mp[i][j];
				}
				cout << endl;
			}
		}
	}
	return 0;
}

75. A|B?(HDU2075)

思路:大水题

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
	int t; cin >> t;
	while (t--) {
		int a, b; cin >> a >> b;
		if (a % b == 0) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

76. 夹角有多大(题目已修改,注意读题)(HDU2076)

思路:按比例算

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		double h, m, s; cin >> h >> m >> s;
		if (h > 12) h -= 12;
		double shi = (h / 12) * 360 + ((m * 60 + s) / 3600) * 30;
		double fen = (m / 60) * 360 + (s / 60) * 6;
		double d = max(fen, shi) - min(fen, shi);
		if (d > 180) d = 360 - d;
		cout << (int)d << endl;
	}
	return 0;
}

77. 汉诺塔IV(HDU2077)

思路:【杭电oj】2077 - 汉诺塔IV(递推)_wyg1997的博客-程序员宅基地

代码:

#include <cstdio>
int main()
{
    __int64 hanoi[22];        //把n个移到相邻杆子所需次数 
    hanoi[0] = 0;
    hanoi[1] = 1;
    for (int i = 2 ; i <= 19 ; i++)
        hanoi[i] = hanoi[i-1] * 3 + 1;
    int u;
    scanf ("%d",&u);
    int n;
    while (u--)
    {
        scanf ("%d",&n);
        printf ("%d\n",2*hanoi[n-1]+2);
    }
    return 0;
}

78. 复习时间(HDU2078)

思路:HDU2078 复习时间【水题】_海岛Blog的博客-程序员宅基地

代码:

/* HDU2078 复习时间 */
 
#include <stdio.h>
#include <limits.h>
 
int main(void)
{
    int t, n, m, a, i;
 
    scanf("%d", &t);
    while(t--) {
        scanf("%d%d", &n, &m);
 
        int min = INT_MAX;
        for(i=1; i<=n; i++) {
            scanf("%d", &a);
 
            if(a < min)
                min = a;
        }
 
        printf("%d\n", (100 - min) * (100 - min));
    }
 
    return 0;
}

79. 选课时间(HDU2079)

思路:选课时间 (HDU-2079)(母函数)_Stephencurry‘s csdn的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		int N, K; cin >> N >> K;
		int v[10], n[10], a[45], b[45];
		for (int i = 0; i < K; i++) {
			cin >> v[i] >> n[i];
		}
		memset(a, 0, sizeof a);
		a[0] = 1;
		for (int i = 0; i < K; i++) {
			memset(b, 0, sizeof b);
			for (int j = 0; j <= n[i] && j * v[i] <= N; j++) {
				for (int k = 0; k + j * v[i] <= N && k <= N; k++) {
					b[k + j * v[i]] += a[k];
				}
			}
			memcpy(a, b, sizeof b);
		}
		cout << a[N] << endl;
	}
	return 0;
}

80. 夹角有多大II(HDU2080)

思路:https://blog.csdn.net/weixin_44313771/article/details/104590798?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166281639716800192276318%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166281639716800192276318&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-104590798-null-null.142^v47^pc_rank_34_default_2,201^v3^control_1&utm_term=%E5%A4%B9%E8%A7%92%E6%9C%89%E5%A4%9A%E5%A4%A7II

代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int T;
	double a, b, c, t, x1, y1, x2, y2;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
		a = sqrt(x1 * x1 + y1 * y1);//第一个点到原点的距离
		b = sqrt(x2 * x2 + y2 * y2);//第二个点到原点的距离
		c = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));//两点之间的距离
		t = acos((a * a + b * b - c * c) / (2 * a * b)) * (180 / acos(-1.0));//因为cosπ=-1,所以arccos-1=π
		printf("%.2f\n", t);
	}
	return 0;
}

81. 手机短号(HDU2081)

思路:字符串处理

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		string s; cin >> s;
		cout << 6;
		for (int i = 6; i <= 10; i++) {
			cout << s[i];
		}
		cout << endl;
	}
	return 0;
}

82. 找单词(HDU2082)

思路:母函数模板

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
const int INF = 0x3f3f3f3f;
int n[maxn], v[maxn];
int sup[maxn], temp[maxn];
int main() {
	int t; cin >> t;
	while (t--) {
		for (int i = 1; i <= 26; i++) {
			cin >> n[i]; v[i] = i;
		}
		memset(sup, 0, sizeof sup);
		sup[0] = 1;
		for (int i = 1; i <= 26; i++) {
			memset(temp, 0, sizeof temp);
			for (int j = 0; j <= n[i] && j * v[i] <= 50; j++) {
				for (int k = 0; k <= 50 && k + j * v[i] <= 50; k++) {
					temp[k + j * v[i]] += sup[k];
				}
			}
			memcpy(sup, temp, sizeof temp);
		}
		int sum = 0;
		for (int i = 1; i <= 50; i++) {
			if (sup[i]) sum += sup[i];
		}
		cout << sum << endl;
	}
	return 0;
}

83. 简易版之最短距离(HDU2083)

思路:选中间的点

代码:

#include<stdio.h>
#include<math.h>
int main()
{
    int m,t,n,i,j,s,a[501],c;
    scanf("%d",&m);
    for (t=0;t<m;t++)
    {
        s=0;
        scanf("%d",&n);
        for (i=0;i<n;i++)
            scanf("%d",&a[i]);
        for (i=0;i<n-1;i++)
            for (j=i+1;j<n;j++)
                if (a[i]>a[j])
        {
            c=a[i];a[i]=a[j];a[j]=c;
        }
        for (i=0;i<n;i++)
            s+=fabs(a[n/2]-a[i]);
        printf("%d\n",s);
    }
}

84. 数塔(HDU2084)

思路:动态规划,从底层开始往上推

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		int n; cin >> n;
		int mp[105][105] = { 0 };
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= i; j++) {
				cin >> mp[i][j];
			}
		}
		for (int i = n - 1; i >= 1; i--) {
			for (int j = 1; j <= i; j++) {
				mp[i][j] = max(mp[i + 1][j], mp[i + 1][j + 1]) + mp[i][j];
			}
		}
		cout << mp[1][1] << endl;
	}
	return 0;
}

85. 核反应堆(HDU2085)

思路:递推

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int gao[35], di[35];
void pre() {
	gao[0] = 1, di[0] = 0;
	for (int i = 1; i <= 33; i++) {
		gao[i] = 3 * gao[i - 1] + 2 * di[i - 1];
		di[i] = gao[i - 1] + di[i - 1];
	}
}
signed main() {
	pre();
	int n;
	while (cin >> n && n != -1) {
		cout << gao[n] << ", " << di[n] << endl;
	}
	return 0;
}

86. A1 = ?(HDU2086)

思路:HDU2086 A1 = ?(组合数学 + 思维)_江心之人的博客-程序员宅基地

代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	while (~scanf("%d",&n)) {
		double a0, an1;
		scanf("%lf%lf", &a0, &an1);
		double sum = 0;
		for (int i = 0; i < n; ++i) {
			double t;
			scanf("%lf", &t);
			sum += (n - i) * t;
		}
		double a1 = (n * a0 + an1 - 2 * sum) / (n + 1);
		printf("%.2lf\n", a1);
	}
	return 0;
}

87. 剪花布条(HDU2087)

思路:KMP算法【算法小结】KMP及扩展KMP_Ctrl AC的博客-程序员宅基地

代码:

#include<bits/stdc++.h>
using namespace std;
int nxt[105];
void getNext(string s, int len) {
	int j = -1; nxt[0] = -1;
	for (int i = 1; i < len; i++) {
		while (j != -1 && s[i] != s[j + 1]) j = nxt[j];
		if (s[i] == s[j + 1]) j++;
		nxt[i] = j;
	}
}
int KMP(string text, string pattern) {
	int n = text.size(), m = pattern.size();
	getNext(pattern, m);
	int ans = 0, j = -1;
	for (int i = 0; i < n; i++) {
		while (j != -1 && text[i] != pattern[j + 1]) {
			j = nxt[j];
		}
		if (text[i] == pattern[j + 1]) j++;
		if (j == m - 1) ans++, j = -1;
	}
	return ans;
}
int main() {
	string a, b; 
	while (cin >> a && a != "#") {
		cin >> b;
		cout << KMP(a, b) << endl;
	}
	return 0;
}

88. Box of Bricks(HDU2088)

思路:先算平均值,再算每个abs,加起来除2,注意输出格式

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n; bool flag = false;
	while (cin >> n, n) {
		vector<int> vec;
		int all = 0;
		for (int i = 0; i < n; i++) {
			int num; cin >> num;
			all += num;
			vec.push_back(num);
		}
		int ave = all / n; int sum2 = 0;
		for (int i = 0; i < n; i++) {
			sum2 += abs(vec[i] - ave);
		}
		if (flag) cout << endl;
		else flag = true;
		cout << sum2 / 2 << endl;
	}
	return 0;
}

89. 不要62(HDU2089)

思路:数位dp总结 之 从入门到模板_wust_wenhao的博客-程序员宅基地_数位dp

代码:

#include<bits/stdc++.h>
using namespace std;
int a[20];
int dp[20][2];
int dfs(int pos, int pre, int sta, bool limit) {
	//cout << "???" << endl;
	if (pos == -1) return 1;
	if (!limit && dp[pos][sta] != -1) return dp[pos][sta];
	int up = limit ? a[pos] : 9;
	int tmp = 0;
	for (int i = 0; i <= up; i++) {
		if (pre == 6 && i == 2) continue;
		if (i == 4) continue;
		tmp += dfs(pos - 1, i, i == 6, limit && i == a[pos]);
	}
	if (!limit) dp[pos][sta] = tmp;
	return tmp;
}
int solve(int num) {
	int pos = 0;
	while (num) {
		a[pos++] = num % 10;
		num /= 10;
	}
	return dfs(pos - 1, -1, 0, true);
}
int main() {
	int n, m;
	while (cin >> n >> m, n && m) {
		memset(dp, -1, sizeof dp);
		cout << solve(m) - solve(n - 1) << endl;
	}
	return 0;
}

90. 算菜价(HDU2090)

思路:水题

代码:

/* HDU2090 算菜价 */

#include <stdio.h>

#define N 32
char s[N];

int main(void)
{
    double x, y, sum = 0;
    while(~scanf("%s%lf%lf", s, &x, &y))
        sum += x * y;
    printf("%.1f\n", sum);

    return 0;
}

91. 空心三角形(HDU2091)

思路:注意行末没有空格,观察每行的格式

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	char c; int height; bool flag = false;
	while (cin >> c && c != '@') {
		if (flag) { cout << endl; }
		else { flag = true; }
		cin >> height;
		int width = 2 * height - 1;
		for (int i = 1; i <= height-1; i++) {
			int space1 = height - i;
			int space2 = (i - 1) * 2 - 1;
			while (space1--) cout << " ";
			cout << c;
			if (space2 > 0) {
				while (space2--) cout << " ";
				cout << c;
			}
			cout << endl;
		}
		for (int i = 1; i <= width; i++) cout << c;
		cout << endl;
	}
	return 0;
}

92. 整数解(HDU2092)

思路:整数解(韦达定理解法)_轩辕小猪的博客-程序员宅基地

代码:

#include<iostream>
using namespace std;
#include <cmath>
int main()
{
	ios::sync_with_stdio(false);
	int m, n;
	while (cin >> m >> n)
	{
		if (m == 0 && n == 0)
			break;
		else
		{
			if ((m * m - 4 * n) < 0)
				cout << "No" << endl;
			else
			{
				if (sqrt(m * m - 4 * n) == (int)sqrt(m * m - 4 * n))
					cout << "Yes" << endl;
				else
					cout << "No" << endl;
			}
		}
	}
	return 0;
}

93. 考试排名(HDU2093)

思路:2093 考试排名_焚冉的博客-程序员宅基地

代码:

#include<iomanip>
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct acm    //定义结构体
{
    char name[100];
    int ac;
    int sj;
}ss[10000];
bool cmp(acm a,acm b)  //排序函数
{
    if(a.ac==b.ac)
    {
        return a.sj<b.sj;  //成绩为时间,越小越大
    }
    else
    {
        return a.ac>b.ac;  //ac数,大则大。
    }
}
int main()
{
    int z=0;
    int n,m;
    cin>>n>>m;    //输入考试题数n,单位罚分数m。
        while(cin>>ss[z].name)  //没有规定人数,直接用while循环
        {
            for(int a=0;a<n;a++)
            {
                char ch;  //定义一个字符,在下面用于接收“)”
                int k,l;
                cin>>k;  //接收成绩
                if(k<=0)
                {
                    continue;  //如果输入的成绩小于0则跳出当前循环,进行下一次循环。
                }
                ss[z].ac++; //没有跳出循环的话,程序从上而下,执行这条语句,ac数+1
                ss[z].sj+=k;//当前人的总成绩
                if(getchar()=='(')//如果有字符“(”,接收且判断。Getchar()用于只接收一个字符。
                {
                    cin>>l;   //接收罚题次数
                    cin>>ch;  //接收字符“)”
                    ss[z].sj+=l*m; //总成绩加上罚时
                }
            }
            z++;  //次数+1,此用于判断总统计人数。不然没有办法输出。
        }
    sort(ss,ss+n,cmp); //结构体排序
    for(int i=0;i<z;i++)
    {
        cout<<left<<setw(10)<<ss[i].name<<" "<<right<<setw(2)<<ss[i].ac<<right<<" "<<setw(4)<<ss[i].sj<<endl;  //setw前带left,或者right表示数据左对齐还是有对齐,setw(n)表示n个长度。
    }
    return 0;

}

94. 产生冠军(HDU2094)

思路:出度为零的点有且只有一个

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; 
	while (cin >> t , t ) {
		map<string, int> chu;
		map<string, int> exist;
		while (t--) {
			string a, b; cin >> a >> b;
			exist[a]++; exist[b]++;
			chu[b]++;
		}
		int cnt = 0;
		for (auto it = exist.begin(); it != exist.end(); it++) {
			string now = it->first;
			if (chu[now] == 0) cnt++;
		}
		cout << (cnt == 1 ? "Yes" : "No") << endl;
	}
	return 0;
}

95. find your present (2)(HDU2095)

思路:同一个数异或同一个数等于零

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; 
	while (scanf("%d",&t) != EOF && t ) {
		int sum = 0;
		for (int i = 0; i < t; i++) {
			int num; scanf("%d", &num);
			sum ^= num;
		}
		cout << sum << endl;
	}
	return 0;
}

96. 小明A+B(HDU2096)

思路:%100

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t; cin >> t;
	while (t--) {
		int a, b; cin >> a >> b;
		a = a % 100, b = b % 100;
		int c = (a + b) % 100;
		cout << c << endl;
	}
	return 0;
}

97. Sky数(HDU2097)

思路:进制转换

代码:

#include<stdio.h>
int main()
{
	int n, s1, s2, sum;
	int fun(int n, int p);
	while (scanf("%d", &n) != EOF)
	{
		if (n == 0)
			break;
		sum = (n / 1000) + (n % 1000) / 100 + (n % 100) / 10 + n % 10;
		s1 = fun(n, 12);
		s2 = fun(n, 16);
		if (sum == s1 && sum == s2)//判断
			printf("%d is a Sky Number.\n", n);
		else
			printf("%d is not a Sky Number.\n", n);

	}
	return 0;
}
int fun(int n, int p)
{
	int temp, s;
	s = 0;
	while (n != 0)
	{
		temp = n % p;//求余数
		n = n / p;//求商
		s = s + temp;//求各位数的和
	}
	return s;
}

98. 分拆素数和(HDU2098)

思路:分拆素数和 (hdu 2098)_阿里斯顿k的博客-程序员宅基地_分拆素数和

代码:

#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int k=0;        //1是素数 0不是素数 
int sushu (int a){ 
    for(int i=2;i*i<=a;i++){
        if(a%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    int n,sum;
    while(~scanf("%d",&n),n)
    {   sum=0;
        for(int i=2;i<n/2;i++)
        {
            if(sushu(i)&&sushu(n-i))
                sum++;
        }
        printf("%d\n",sum); 
    }
    return 0;
}

99. 整除的尾数(HDU2099)

思路:先乘上100,再看余数。注意格式

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int a, b;
	while (cin >> a >> b, a && b) {
		a *= 100;
		int left = a % b;
		int add = b - left;
		bool first = true;
		if (add == b) {
			first = false;
			cout << "00";
		}
		for (int i = add; i <= 99; i += b) {
			if (!first) cout << " ";
			else first = false;
			if (i / 10 == 0) cout << 0 << i;
			else cout << i ;
		}
		cout << endl;
	}
	return 0;
}

“ Ctrl AC!一起 AC!”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_62434776/article/details/125602451

智能推荐

监控WebLogic 9.x和10.x解决方案(监控应用服务器系列文章)-程序员宅基地

文章浏览阅读199次。前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下 点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨 论:3552652..._weblogic10g 连接池监控

pthread 使用中的问题-程序员宅基地

文章浏览阅读86次。为什么80%的码农都做不了架构师?>>> ..._cflags="-pthread -os -wall -ffunction-sections -fdata-sections

【Android】Bitmap图片旋转、缩放、翻转等变换(90/100)_android opengl es2.0图片旋转-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏10次。简单的点胜过复杂的高明_android opengl es2.0图片旋转

解决spring.profiles.active设置的变量属性不起作用_spring.profiles.active不生效-程序员宅基地

文章浏览阅读4.4w次,点赞8次,收藏17次。今天写的如下代码,发现@profiles.active@变量怎么都不起作用(检查这个属性起作用与否的快速方法:可直接按住ctrl再点击这个属性,能定位到相应的值的位置则起作用,否则不起作用)检查pom文件中profiles的配置,也没发现有什么问题,pom文件中的profiles的配置如下:检查半天,始终查不到不起作用的原因,最后发现在pom文件中添加如下代码后,便可以了。..._spring.profiles.active不生效

qt table 简易封装,样式美化,以及 合并表格和颜色的区分 已解决-程序员宅基地

文章浏览阅读274次。在需求中, 难免会使用 table 进行渲染窗口,做一个简单的封装。

安装360容器云wayne_docker 安装360云盘-程序员宅基地

文章浏览阅读497次。参考以下链接进行安装,过程中又一些错误,记录如下:https://github.com/Qihoo360/wayne/blob/master/README-CN.md先安装go的环境,不记录。‘’go get github.com/Qihoo360/wayne‘’..._docker 安装360云盘

随便推点

【ZOJ3930 The 16th Zhejiang University Programming ContestD】【模拟】Dice Notation 表达式转化标准格式_d - dice notation-程序员宅基地

文章浏览阅读681次。Dice NotationTime Limit: 2 Seconds Memory Limit: 65536 KB... I want to get some water from this strange lake. I have a bottle. OK. Then I want to go forward to look into the parte_d - dice notation

管理右键的新建菜单_如何管理右键新建菜单-程序员宅基地

文章浏览阅读5.1k次,点赞2次,收藏7次。一、桌面,按鼠标右键,确认想要新增/删除项的后缀名。二、win+R,输入regedit,进入注册表编辑三、搜索\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew,class的字符串值是支持从右键新建的程序。按照需要自行增删:双击classes,在folder前添加一行.xmind四、在计算机\HKEY_CURRENT_USER中搜索第三步._如何管理右键新建菜单

2021-03-13-程序员宅基地

文章浏览阅读35次。

layui:图片上传_layui上传图片-程序员宅基地

文章浏览阅读9.8k次,点赞8次,收藏16次。Layui文件上传layui官网:https://www.layui.com/layui插件下载官方文档(关于文件上传)快速入门前端1、 index页面,引入css样式和js脚本<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"> <title>index<_layui上传图片

Windows服务器上MQ发送消息,通过springboot接收阿里云服务器上消息_mq发送系统消息通过云服务器吗-程序员宅基地

文章浏览阅读685次。说明:本项目开发前提是,在本地windows机器上搭建了MQ,并建立好发送队列管理器,本地队列,远程队列,发送通道;在阿里云服务器上也搭建了MQ,建立了接收队列管理器,接收通道。具体步骤见本人之前的博客。地址:https://blog.csdn.net/qq_34569497/article/details/81197910此处,模拟场景是,本地Windows机器放入测试消息后,在spring..._mq发送系统消息通过云服务器吗

Lombok注解失效_lombok does not copy the annotation 'org.springfra-程序员宅基地

文章浏览阅读771次。最近接触项目代码,导入代码后报错,getter,setter方法报错cant resolve method,意识到是该注解包lombok没有正确的工作,pom里已经添加了dependency,排除代码的问题,那么就应该是IDEA的问题。查阅后发现是IDEA缺少lombok的plugin插件。本打算通过IDEA内的插件市场直接安装,然而plugins里的market无法打开,于是去下载jetbr..._lombok does not copy the annotation 'org.springframework.beans.factory.annot