21.Sine之舞
#include <iostream>
using namespace std;
int main() {
string a[201];
string s;
int n;
cin >> n;
for(int i = 0; i < n; i++) {
if(i == 0) {
a[i] = "sin(1";
continue;
}
a[i] = a[i - 1];
if(i % 2 == 1) {
a[i] += "-";
} else {
a[i] += "+";
}
a[i] += "sin(";
a[i] += (char)(i + '1');
}
for(int i = 0; i < n; i++) {
for(int j = 0; j <= i; j++) {
a[i] += ")";
}
}
for(int i = 2; i <= n; i++) {
s += "(";
}
for(int i = n - 1; i >= 1; i--) {
s += a[n - 1 - i];
s += "+";
s += (char)(i + 1 + '0');
s += ")";
}
s += a[n-1];
s += "+1";
cout << s;
return 0;
}
22.FJ的字符串
#include <iostream>
using namespace std;
string dfs(int n) {
if(n == 1) {
return "A";
} else {
return dfs(n - 1) + (char)(n + 'A' - 1) + dfs(n - 1);
}
}
int main() {
int n;
cin >> n;
cout << dfs(n);
return 0;
}
23.芯片测试
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[20][20];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
for(int i = 0; i < n; i++) {
int cnt = 0;
for(int j = 0; j < n; j++) {
if(j != i)
cnt += a[j][i];
}
if(cnt >= n/2) {
cout << i+1 << " ";
}
}
return 0;
}
24.龟兔赛跑预测
#include <iostream>
using namespace std;
int main() {
int vr, vt, t, s, l;
cin >> vr >> vt >> t >> s >> l;
int ttime = l / vt;
int cnttime = 0;
int lent = 0;
int lenr = 0;
int breaktime = 0;
int flag = 0;
while(lent < l && lenr < l) {
if(flag == 0 && lenr - lent < t || flag == 1 && breaktime >= s) {
lenr = lenr + vr;
flag = 0;
breaktime = 0;
} else {
flag = 1;
breaktime++;
}
lent = lent + vt;
cnttime++;
}
if(lent >= l && lenr < l) {
cout << "T" << endl;
} else if(lent < l && lenr >= l) {
cout << "R" << endl;
} else {
cout << "D" << endl;
}
cout << cnttime;
return 0;
}
25.回形取数
#include <iostream>
#include <memory.h>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int a[201][201];
memset(a, -1, sizeof(a));
int i = 0, j = 0;
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
cin >> a[i][j];
i = 0, j = 0;
int total = 0;
while(total < m * n) {
while(i <= m-1 && a[i][j] != -1) {//down
cout << a[i][j] << " ";
a[i][j] = -1;
i++;
total++;
}
i--;
j++;
while(j <= n-1 && a[i][j] != -1) {//right
cout << a[i][j] << " ";
a[i][j] = -1;
j++;
total++;
}
j--;
i--;
while(i >= 0 && a[i][j] != -1) {//up
cout << a[i][j] << " ";
a[i][j] = -1;
i--;
total++;
}
i++;
j--;
while(j >= 0 && a[i][j] != -1) {//left
cout << a[i][j] << " ";
a[i][j] = -1;
j--;
total++;
}
j++;
i++;
}
return 0;
}
26.报时助手
#include <iostream>
using namespace std;
int main() {
int h, m;
cin >> h >> m;
string arr[24] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", "twenty one", "twenty two", "twenty three"};
cout << arr[h] << " ";
if (m == 0)
cout << "o'clock";
int t = m % 10;
m = m / 10;
switch(m) {
case 2: cout << "twenty "; break;
case 3: cout << "thirty "; break;
case 4: cout << "forty "; break;
case 5: cout << "fifty "; break;
default: break;
}
if (m == 0 && t != 0) {
cout << arr[t];
}
if (m == 1) {
cout << arr[t + 10];
}
if (m != 0 && m != 1 && t!= 0) {
cout << arr[t];
}
return 0;
}
27.2n皇后问题
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int cnt = 0;
bool issafe(vector<vector<int> > pic, vector<int> pos, int row) {
for(int i = 0; i < row; i++) {
if(pos[i] == pos[row] || abs(i - row) == abs(pos[i] - pos[row]))
return false;
}
return true;
}
void blackdfs(vector<vector<int> > blackpic, vector<int> blackpos, int n, int blackrow) {
if(blackrow == n) {
cnt++;
return ;
}
for(blackpos[blackrow] = 0; blackpos[blackrow] < n; blackpos[blackrow]++) {
if(blackpic[blackrow][blackpos[blackrow]] == 1 && issafe(blackpic, blackpos, blackrow)) {
blackdfs(blackpic, blackpos, n, blackrow + 1);
}
}
}
void dfs(vector<vector<int> > pic, vector<int> pos, int n, int row) {
if(row == n) {
vector<vector<int> > blackpic(n, vector<int>(n));
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
blackpic[i][j] = pic[i][j];
}
}
for(int i = 0; i < n; i++) {
blackpic[i][pos[i]] = 0;
}
vector<int> blackpos(n);
blackdfs(blackpic, blackpos, n, 0);
return ;
}
for(pos[row] = 0; pos[row] < n; pos[row]++) {
if(pic[row][pos[row]] == 1 && issafe(pic, pos, row)) {
dfs(pic, pos, n, row + 1);
}
}
}
int main() {
int n;
cin >> n;
vector<vector<int> > pic(n, vector<int>(n));
vector<int> pos(n);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> pic[i][j];
}
}
dfs(pic, pos, n, 0);
cout << cnt;
return 0;
}
28.Huffuman树
#include <iostream>
#include <vector>
#include <algorithm>
int cmp1(int a, int b) {
return a > b;
}
using namespace std;
int main() {
int n;
int price = 0;
vector<int> v;
cin >> n;
for(int i = 0; i < n; i++) {
int temp;
cin >> temp;
v.push_back(temp);
}
int size = v.size();
while(size >= 2) {
sort(v.begin(), v.end(), cmp1);
int t = v[size-1] + v[size-2];
price += t;
v.pop_back();
v.pop_back();
v.push_back(t);
size = v.size();
}
cout << price;
return 0;
}
29.高精度加法
#include <iostream>
#include <string>
using namespace std;
int main() {
string a;
string b;
int A[100] = {0};
int B[100] = {0};
cin >> a >> b;
int lena = a.length(), lenb = b.length();
int j = 0;
for (int i = lena - 1; i >= 0; i--) {
A[j++] = a[i] - '0';
}
j = 0;
for (int i = lenb - 1; i >= 0; i--) {
B[j++] = b[i] - '0';
}
int C[101] = {0};
int temp = 0;
for (int i = 0; i < 100; i++) {
C[i] = A[i] + B[i] + temp;
temp = C[i] / 10;
C[i] = C[i] % 10;
}
int max = lena;
if (max < lenb)
max = lenb;
max = max - 1;
if (C[max + 1] != 0)
max = max + 1;
for (int i = max; i >= 0; i--) {
cout << C[i];
}
return 0;
}
30.阶乘计算
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int A[10000] = {1};
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 10000; j++) {
A[j] = A[j] * i;
}
for (int j = 0; j < 10000; j++) {
if (A[j] >= 9) {
A[j + 1] =A[j + 1] + A[j] / 10;
A[j] = A[j] % 10;
}
}
}
int t = 0;
for (int i = 9999; i >= 0; i--) {
if (A[i] != 0) {
t = i;
break;
}
}
for (int i = t; i >= 0; i--) {
cout << A[i];
}
return 0;
}