OpenJudge - NOI - 1.13编程基础之综合应用(C++语言)


01:数制转换

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

string getAns(string CusNum, int Format, int AnsFormat) {
	string Ans = "";
	int DecNum = 0;
	const char Num2Char[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
							   'B', 'C', 'D', 'E', 'F' };
	
	for (int i = 0; i < CusNum.length(); ++i) {
		if ('0' <= CusNum[i] && CusNum[i] <= '9') {
			CusNum[i] -= '0';
		}
		else if ('a' <= CusNum[i] && CusNum[i] <= 'f') {
			CusNum[i] -= ('a' - 10);
		}
		else {
			CusNum[i] -= ('A' - 10);
		}

		DecNum += CusNum[i] * pow(Format, CusNum.length() - i - 1);
	}

	if (DecNum == 0) { /* 特殊情况 */
		Ans += '0';
		return Ans;
	}

	while (DecNum > 0) { 
		Ans += Num2Char[DecNum % AnsFormat]; /* 按照之前声明的表,找到对应的值 */
		DecNum /= AnsFormat;
	}

	reverse(Ans.begin(), Ans.end()); /* 字符串需要倒序 */

	return Ans;
}

int main(void) {
	int a, b;
	string n;
	cin >> a >> n >> b;
	cout << getAns(n, a, b);
	return 0;
}

02:不吉利日期

#include<iostream>

using namespace std;

int main(void) {
	const int Months[] = { 0, 12, 31, 28, 31, 30, 31, 30, 31, 31, 30,
						  31, 30, 31 };

	int w;
	cin >> w;
	for (int i = 1; i <= 12; ++i) {
		w += (Months[i] % 7);
		w %= 7;

		if (w == 5) {
			cout << i << endl;
		}
	}

	return 0;
}

03:八进制小数

#include<iostream>
#include<string>
#include<iomanip>
#include<cmath>

using namespace std;

int main(void) {
	string OctNum;
	cin >> OctNum;

	double Ans = 0;
	for (int i = OctNum.length() - 1; i >= 2; --i) {
		Ans += (OctNum[i] - '0') * 1.0;
		Ans /= 8;
	}

	/* 这里注意一下C++中的输出格式控制 */
	cout << OctNum << " [8] = " << setiosflags(ios::fixed) 
		 << setprecision(3 * (OctNum.length() - 2)) << Ans << " [10]" << endl;

	return 0;
}

04:垂直直方图

#include<iostream>
#include<string>

using namespace std;

int main(void) {
	int LetHeight[150] = { 0 };
	int MapFlag[325][150] = { 0 };
	int MaxLetHeight = 0;

	for (int i = 1; i <= 4; ++i) {
		string ReadStr;
		getline(cin, ReadStr);
		
		for (int i = 0; i < ReadStr.length(); ++i) {
			if (ReadStr[i] != ' ') { /* 不是空格字符 */
				MapFlag[LetHeight[ReadStr[i]]][ReadStr[i]] = 1;

				if (MaxLetHeight < LetHeight[ReadStr[i]]) {
					MaxLetHeight = LetHeight[ReadStr[i]];
				}

				LetHeight[ReadStr[i]]++;
			}
		}
	}

	for (int i = MaxLetHeight; i >= 0; --i) {
		for (int j = 'A'; j <= 'Z'; ++j) {
			if (MapFlag[i][j] == 1) {
				cout << "* ";
			}
			else {
				cout << "  ";
			}
		}

		cout << endl;
	}

	cout << "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" << endl;

	return 0;
}

05:素数回文数的个数

#include<iostream>

using namespace std;

/* 是否为质数 */
bool isPrime(int Num) {
	for (int i = 2; i * i <= Num; ++i) {
		if (Num % i == 0) {
			return false;
		}
	}

	return true;
}

/* 是否为回文数 */
bool isPalin(int Num) {
	int Ans = 0, Temp = Num;

	while (Num > 0) {
		Ans = (Num % 10 + Ans * 10);
		Num /= 10;
	}

	if (Ans == Temp) {
		return true;
	}
	else {
		return false;
	}
}

int main(void) {
	int n;
	cin >> n;

	int Cnt = 0;
	for (int i = 11; i <= n; ++i) {
		if (isPalin(i) && isPrime(i)) {
			Cnt++;
		}
	}

	cout << Cnt << endl;

	return 0;
}

06:循环数

这道题博主觉得有些问题,尤其是范围和测试数据。

#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main(void) {
	string NumStr;
	cin >> NumStr;
	int Len = NumStr.length();

	vector<int> Num(65); /* 防止溢出 */
	for (int i = 0; i < Len; ++i) {
		Num[i] = NumStr[i] - '0';
	}

	NumStr += NumStr; /* 运算符重载,使数字串首位相接 */

	vector<int> Ans(65);
	for (int i = 1; i <= Len; ++i) {
		string TempStr = "";
		int Res = 0;
		for (int j = Len - 1; j >= 0; --j) {
			int Temp = Num[j] * i + Res;
			Res = Temp / 10;
			Ans[j] = Temp % 10;
		}
		for (int k = 0; k < Len; ++k) {
			TempStr += (char)Ans[k] + '0';
		}
		if (NumStr.find(TempStr, 0) == -1) {
			cout << '0' << endl;
			return 0;
		}
	}

	cout << '1' << endl;

	return 0;
}

07:玛雅历

#include<iostream>
#include<string>

using namespace std;

string HaabMonName[] = { "pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", 
						 "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"
};

string TzolkinDayName[] = { "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk",
							"ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"
};

void Haab2Tzolkin(int Day, string Month, int Year) {
	int TotalDay = Year * 365;
	
	int i;
	for (i = 0; i <= 18; ++i) {
		if (Month == HaabMonName[i]) {
			break;
		}
	}

	TotalDay += 20 * i + Day; /* 从0开始的天数 */

	int TzolkinYear = TotalDay / 260; /* 一年260天 */

	TotalDay %= 260; /* 不足260天,构不成一年 */

	string TzolkinName = TzolkinDayName[TotalDay % 20]; /* 20天一个时期 */

	int TzolkinDay = TotalDay % 13 + 1; /* 天数是从1开始计算的 */

	cout << TzolkinDay << " " << TzolkinName << " " << TzolkinYear << endl;
}

int main(void) {
	int Cnt;
	cin >> Cnt;
	cout << Cnt << endl;

	for (int i = 1; i <= Cnt; ++i) {
		int Day;
		string Month;
		int Year;
		char ToolCh;
		cin >> Day >> ToolCh >> Month >> Year;
		Haab2Tzolkin(Day, Month, Year);
	}

	return 0;
}

08:特殊日历计算

#include<iostream>

using namespace std;

bool isLeapYear(int year) {
	if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
		return true;
	}
	return false;
}

void getSpecCal(int hour, int min, int sec, int day, int month, int year) {
	int TotalDay = 0;
	int TotalSec = 0;
	
	/* 年 */
	for (int i = 2000; i < year; ++i) {
		if (isLeapYear(i)) /* 判断闰年 */
			TotalDay += 366;
		else
			TotalDay += 365;
	}

	/* 月 */
	const int ComMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	for (int i = 0; i < month - 1; ++i) {
		TotalDay += ComMonth[i];
	}
	if (month > 2 && isLeapYear(year)) {
		TotalDay++;
	}

	/* 日 */
	TotalDay += (day - 1);

	/* 小时,分钟,秒 */
	TotalSec += hour * 3600 + min * 60 + sec;
	TotalSec = TotalSec * 125 / 108; /* 该历法的一天和我们的一天一样长 */

	/* 转化 */
	int SpecYear = TotalDay / 1000;
	int SpecMonth = TotalDay % 1000 / 100 + 1;
	int SpecDay = TotalDay % 1000 % 100 + 1;
	int SpecHour = TotalSec / 10000;
	int SpecMin = TotalSec % 10000 / 100;
	int SpecSec = TotalSec % 10000 % 100;

	cout << SpecHour << ":" << SpecMin << ":" << SpecSec << " "
		 << SpecDay << "." << SpecMonth << "." << SpecYear << endl;
}

int main(void) {
	int Cnt;
	cin >> Cnt;

	for (int i = 1; i <= Cnt; ++i) {
		int Hour, Min, Sec, Day, Month, Year;
		char ToolChar;
		cin >> Hour >> ToolChar >> Min >> ToolChar >> Sec >> Day >> ToolChar >> Month  >> ToolChar >> Year;
		getSpecCal(Hour, Min, Sec, Day, Month, Year);
	}

	return 0;
}

10:判决素数个数

#include<iostream>

using namespace std;

bool isPrime(int Num) {
	for (int i = 2; i * i <= Num; ++i) {
		if (Num % i == 0)
			return false;
	}
	return (Num != 1);
}

int main(void) {
	int X, Y;
	cin >> X >> Y;

	if (X > Y) /* 这里是一个扣分点 */
		swap(X, Y);

	int Cnt = 0;
	for (int i = X; i <= Y; ++i) {
		if (isPrime(i))
			Cnt++;
	}

	cout << Cnt << endl;

	return 0;
}
  • 暂未补完


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM