IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【HDU100】杭电入门一百道 C++ 全 题 解 -> 正文阅读

[C++知识库]【HDU100】杭电入门一百道 C++ 全 题 解

“ 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的博客-CSDN博客_神、上帝以及老天爷

代码:

#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)——考新郎]+(错排的简单理解+改进计算组合数)_丿繁年的博客-CSDN博客

代码:

#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)

思路:折线分割平面(图文解析)_扣子不会飞的博客-CSDN博客_折线分割平面

代码:

#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的博客-CSDN博客

代码:

#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-龟兔赛跑_凉哈哈的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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)_键盘上的舞者的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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 (超详细题解)_林小鹿@的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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-五七小卡的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

/* 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的博客-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 = ?(组合数学 + 思维)_江心之人的博客-CSDN博客

代码:

#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的博客-CSDN博客

代码:

#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的博客-CSDN博客_数位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)

思路:整数解(韦达定理解法)_轩辕小猪的博客-CSDN博客

代码:

#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 考试排名_焚冉的博客-CSDN博客

代码:

#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的博客-CSDN博客_分拆素数和

代码:

#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!”

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:08:17  更:2022-09-21 00:10:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:20:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码