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;
}
- 暂未补完