11.十六进制转十进制
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while (cin >> s) {
int len = s.length();
long long sum = 0;
for (int i = 0; i < len; i++) {
if (s[i] >= 'A' && s[i] <= 'F') {
sum = sum * 16 + s[i] - 'A' + 10;
}
else {
sum = sum * 16 + s[i] - '0';
}
}
cout << sum;
}
return 0;
}
12.十六进制转八进制
#include <iostream>
#include <map>
using namespace std;
int main() {
string b, s, a;
int n;
cin >> n;
string arr[16] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000",
"1001", "1010", "1011", "1100", "1101", "1110", "1111"};
map<string, string> m;
m["000"] = "0"; m["001"] = "1"; m["010"] = "2"; m["011"] = "3"; m["100"] = "4";
m["101"] = "5"; m["110"] = "6"; m["111"] = "7";
for(int i = 0; i < n; i++) {
cin >> s;
int lens = s.length();
for(int j = 0; j < lens; j++) {
if(s[j] > '9') {
b += arr[s[j] - 'A' + 10];
} else {
b += arr[s[j] - '0'];
}
}
int lenb = b.length();
if(lenb % 3 == 1) {
b = "00" + b;
} else if(lenb % 3 == 2) {
b = "0" + b;
}
int flag = 0;
for(int j = 0; j < lenb; j += 3) {
string temp = b.substr(j, 3);
string t = m[temp];
if(j == 0 && t == "0") {
flag = 1;
continue;
}
if(flag == 1 && j == 3 && t == "0") {
continue;
}
cout << t;
}
cout << endl;
b = "";
}
return 0;
}
13.数列排序
#include <iostream>
#include <algorithm>
using namespace std;
int cmp(int a, int b) {
return a < b;
}
int main() {
int n;
int a[200];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n, cmp);
cout << a[0];
for (int i = 1; i < n; i++)
cout << " " << a[i];
return 0;
}
14.时间转换
#include <iostream>
using namespace std;
int main() {
int h = 0, m = 0, s = 0, t;
cin >> t;
h = t / 3600;
t = t % 3600;
m = t / 60;
t = t % 60;
s = t;
cout << h << ":" << m << ":" << s;
return 0;
}
15.字符串对比
#include <iostream>
#include <string>
using namespace std;
int main() {
string a, b;
cin >> a >> b;
int lena = a.length();
int lenb = b.length();
if (lena != lenb) {
cout << 1;
return 0;
}
int flag = 1;
for (int i = 0; i < lena; i++) {
if (a[i] != b[i]) {
flag = 0;
break;
}
}
if (flag == 1) {
cout << 2;
return 0;
}
int flag2 = 1;
for (int i = 0; i < lena; i++) {
a[i] = tolower(a[i]);
b[i] = tolower(b[i]);
if (a[i] != b[i]) {
flag2 = 0;
break;
}
}
if (flag2 == 1) {
cout << 3;
} else {
cout << 4;
}
return 0;
}
16.分解质因数
#include <iostream>
using namespace std;
int isprime(int n) {
if(n <= 1)
return 0;
else if(n == 2 || n == 3)
return 1;
else {
for(int i = 2; i * i < n; i++) {
if(n % i == 0) {
return 0;
}
}
return 1;
}
}
int main() {
int a, b;
cin >> a >> b;
for(int i = a; i <= b; i++) {
int temp = i;
cout << i << "=";
int flag = 0;
while(temp != 1) {
for(int j = 2; j <= temp; j++) {
if(isprime(j) && temp % j == 0) {
temp = temp / j;
if(flag == 1)
cout << "*";
cout << j;
flag = 1;
break;
}
}
}
cout << endl;
}
return 0;
}
17.矩阵乘法
#include <iostream>
using namespace std;
long long int b[40][40];
int main() {
int n, m;
cin >> n >> m;
long long int a[40][40];
long long int t[40][40];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> a[i][j];
t[i][j] = a[i][j];
}
}
if(m == 0) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i != j) {
cout << 0 << " ";
} else {
cout << 1 << " ";
}
}
cout << endl;
}
return 0;
}
while(--m) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int k = n;
while(k) {
b[i][j] += t[i][k-1] * a[k-1][j];
k--;
}
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
t[i][j] = b[i][j];
b[i][j] = 0;
}
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cout << t[i][j] << " ";
}
cout << endl;
}
return 0;
}
18.矩形面积交
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
double x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
if(x1 > x2)
swap(x1, x2);
if(y1 > y2)
swap(y1, y2);
if(x3 > x4)
swap(x3, x4);
if(y3 > y4)
swap(y3, y4);
if((x2 < x3 && x1 < x3) || (y2 < y3 && y1 < y3) || (x4 < x1 && x3 > x1) || (y4 < y1 && y3 < y1)) {
cout << "0.00";
return 0;
}
double a[4] = {x1, x2, x3, x4};
double b[4] = {y1, y2, y3, y4};
sort(a, a+4);
sort(b, b+4);
double area = (a[2] - a[1]) * (b[2] - b[1]);
printf("%.2f", area);
return 0;
}
19.完美的代价
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
string s;
cin >> s;
int j = n - 1;
int cnt = 0;
int flag = 0;
for(int i = 0; i < j; i++) {
for(int k = j; k >= i; k--) {
if(k == i) {
if(n % 2 == 0 || flag == 1) {
cout << "Impossible";
return 0;
}
flag = 1;
cnt += n / 2 - i;
} else if(s[k] == s[i]) {
for(int l = k; l < j; l++) {
swap(s[l], s[l+1]);
cnt++;
}
j--;
break;
}
}
}
cout << cnt;
return 0;
}
20.数的读法
#include <iostream>
using namespace std;
string b[10] = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ","qi ", "ba ", "jiu "};
string func(string t) {
string ans;
int lent = t.length();
if(lent >= 4) {
ans += b[t[0]-'0'];
ans += "qian ";
}
if(lent >= 3) {
if(t[lent-3] != '0') {
ans += b[t[lent-3]-'0'];
ans += "bai ";
}
}
if(lent >= 2) {
if(t[lent-2] == '1') {
if(lent != 2) {
ans += "yi shi ";
} else {
ans += "shi ";
}
}
if(t[lent-2] != '0' && t[lent-2] != '1') {
ans += b[t[lent-2]-'0'];
ans += "shi ";
}
}
if(lent >= 1) {
if(t[lent-1] != '0') {
ans += b[t[lent-1]-'0'];
}
}
return ans;
}
int main() {
string s;
cin >> s;
int len = s.length();
string sub;
if(len == 10) {
sub = s.substr(0, 2);
cout << func(sub) << "yi ";
}
if(len == 9) {
sub = s.substr(0, 1);
cout << func(sub) << "yi ";
}
sub = "";
int flag = 0;
if(len >= 5) {
for(int i = len-8; i < len - 4; i++) {
if(i < 0) continue;
if(flag == 0 && s[i] == '0') {
continue;
}
sub += s[i];
flag = 1;
}
if(flag == 1) {
cout << func(sub) << "wan ";
}
flag = 0;
sub = "";
for(int i = len-4; i < len; i++) {
if(flag == 0 && s[i] == '0') {
continue;
}
if((i == len-1 && s[i-1] == '0') ||(i == len-2 && s[i-1] == '0') || (i == len-3 && s[i-1] == '0'))
cout << "ling ";
sub += s[i];
flag = 1;
}
}
if(len <= 4) {
sub = s;
flag = 1;
}
if(flag == 1) {
cout << func(sub);
}
return 0;
}