(蓝桥杯基础训练题目)纯代码

矩阵乘法:

#include<iostream>

using namespace std;

int main() {
	int n, m,i,j;
	cin >> n >> m;
	int res[30][30],temp[30][30];
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			cin >> res[i][j];
			temp[i][j] = res[i][j];
		}
	}
	for (int q = 0; q < m-1; q++) {
		int temp2[30][30] = { 0 };
		for (i = 0; i < n; i++) {
			for (j = 0; j < n; j++) {
				for (int k = 0; k < n; k++) {
					temp2[i][j] += res[i][k] * temp[k][j];
				}
			}
		}
		for (i = 0; i < n; i++) {
			for (j = 0; j < n; j++) {
				res[i][j] = temp2[i][j];
			}
		}

	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			if (m == 0&&i==j) {
				cout << 1 << ' ';
				continue;
			}
			else if (m==0){
				cout << 0 << ' ';
				continue;
			}
			cout << res[i][j] << ' ';
		}
		cout << endl;
	}
	return 0;
}


01字串

#include<iostream>

using namespace std;

int main()
{
	int i, j, k, m, n;
	for (i = 0; i < 2; i++) {
		for (j = 0; j < 2; j++) {
			for (k = 0; k < 2; k++) {
				for (m = 0; m < 2; m++) {
					for (n = 0; n < 2; n++) {
						cout << i << j << k << m << n << endl;
					}
				}
			}
		}
	}
	return 0;
}

2n皇后 递归回溯算法八皇后问题

#include <iostream>
#include<stdlib.h>
#include<vector>
#include<math.h>
using namespace std;
int warray[9] = { 0 }; //用于存放白皇后位置 warray[1] = 2,表示1行2列有白皇后
int barray[9] = { 0 }; //用于存放黑皇后位置
int vis[9][9] = { 0 }; //用于存放输入矩阵
int n;
int cnt = 0; //记录摆放方法总数
int whiteQuene(int x) { //摆放白皇后
	if (x > n) {
		cnt++;
		return 0;
	}

	for (int tj = 1; tj <= n; tj++) {
		if (!vis[x][tj] || tj == barray[x]) {//此处若放有黑皇后,那么不能在这放置
			continue;
		}
		int j = 1;
		while (j < x) {  //检测是否相同列或者对角线已存在相同颜色皇后
			if (warray[j] == tj || fabs(j - x) == fabs(warray[j] - tj)) {//这里取绝对值直接将对半分的两条对角线全部排除
				break;
			}
			j++;//保存此时的j值,如果检测到不是本行放置的皇后,那么不再进入递归
		}
		if (j == x) {
			warray[x] = tj;
			whiteQuene(x + 1);
		}
	}
	return 0;

}
int blackQuene(int x) { // 摆放黑皇后
	if (x > n) {
		whiteQuene(1); //每当黑皇后摆放完一种,就开始摆放白皇后
		return 0;
	}
	for (int tj = 1; tj <= n; tj++) {
		if (!vis[x][tj]) {
			continue;
		}


		int j = 1;
		while (j < x) { //检测是否相同列或者对角线已存在相同颜色皇后
			if (barray[j] == tj || fabs(x - j) == fabs(tj - barray[j])) {
				break;
			}
			j++;
		}
		if (j == x) {
			barray[x] = tj;
			blackQuene(x + 1);
		}
	}
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			int t;
			cin >> t;
			vis[i][j] = t;
		}
	}
	blackQuene(1);
	cout << cnt;
	return 0;
}

sine之舞 字符串拼接

#include<iostream>
#include<string>

using namespace std;

string An(int n);

int main() {
	int n,i;
	string Sn = "",temp,pt = "0";
	cin >> n;
	for (i = 0; i < n; i++) {
		if (i == n - 1) {
			Sn = Sn + An(i+1) + "+" + "1";
			break;
		}
		pt = "0";
		pt[0] = pt[0] + (n - i);
		Sn = "(" + Sn + An(i+1) +"+"+ pt+")";
	}
	cout << Sn << endl;
	return 0;
}
//递归不可行
string An(int n) {
	string temp = "sin",ret = "",pt = "0";
	for (int i = n; i >= 1; i--) {
		if (i == n) {
			pt = "0";
			pt[0] = pt[0] + n;
			ret = temp + "(" + pt + ")";
			continue;
		}
		if (i == 1) {
			ret = temp + "(1-" + ret + ")";
			break;;
		}
		if (i % 2 == 0) {
			pt = "0";
			pt[0] = pt[0] + i;
			ret = temp + "(" + pt + "+" + ret + ")";
		}
		else {
			pt = "0";
			pt[0] = pt[0] + i;
			ret = temp + "(" + pt + "-" + ret + ")";
		}
	}
	return ret;
}

报时助手

#include<iostream>
#include<map>
#include<string>

using namespace std;

int main() {
	int h, m;
	cin >> h;
	cin >> m;
	map<int, string> init;
	init.insert({ {0,"zero"}, {1, "one"} ,{2,"two"}, {3,"three"}, {4,"four"}, {5,"five"} ,{6,"six"} ,{7,"seven"}, {8,"eight"}, {9,"nine"} ,{10,"ten"}, {11,"eleven"} ,{12,"twelve"} ,{13,"thirteen"}, {14,"fourteen"}, {15,"fifteen"}, {16,"sixteen"}, {17,"seventeen"} ,{18,"eighteen"}, {19,"nineteen"}, {20,"twenty"},{30,"thirty"},{40,"forty"},{50,"fifty"} });
	string res;
	if (h <= 20) {
		if (m == 0) {
			cout << init[h] << " o'clock"<<endl;
		}
		else {
			if (m <= 20) {
				cout << init[h] << " " << init[m] << endl;
			}
			else {
				cout << init[h] << " " << init[(m / 10)*10] <<" "<< init[m % 10] << endl;
			}
		}
	}
	else {
		if (m == 0) {
			cout << init[(h / 10) * 10] << " " << init[h % 10] << " o'clock" << endl;
		}
		else {
			if (m <= 20) {
				cout << init[(h / 10) * 10] << " " << init[h % 10] << " " << init[m] << endl;
			}
			else {
				cout << init[(h / 10) * 10] << " " << init[h % 10]<< " " << init[(m / 10) * 10] <<" "<< init[m % 10] << endl;
			}
		}
	}
	return 0;
}


#include<iostream>

using namespace std;

string  n[100] = { "zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven",
				"twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty",
				"thirty","forty","fifty" };

void ass(int num) {
	int a = num / 10;
	int b = num % 10;
	if (num <= 20) {
		cout << n[num];
	}
	else {
		cout << n[a + 18];
		if (b != 0) {
			cout << " " << n[b];
		}
	}
}

void time_ass(int hour, int minu) {
	if (minu == 0) {
		ass(hour);
		cout << " o'clock" << endl;
	}
	else {
		ass(hour);
		cout << " ";
		ass(minu);
		cout << endl;
	}
}

int main() {
	int h, m;
	cin >> h >> m;
	time_ass(h, m);
	return 0;
}

查找整数

#include<iostream>

using namespace std;

int main()
{
	int n,temp[1000],m;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> temp[i];
	cin >> m;
	for (int j = 0; j < n; j++) {
		if (temp[j] == m) {
			cout << j + 1 << endl;
			return 0;
			break;
		}
	}
	cout << -1 << endl;
	return 0;
}

高精度算法 (大数相乘)

#include <iostream>
#include <string>

using namespace std;

int main() {
	string a,b;
	int c[1500] = { 0 }, d[1500] = { 0 };
	int i, k, t, m, n;
	cin >> a;
	cin >> b;

	//   分别求出每位数字的位数 
	m = a.size();
	n = b.size();

	//      将数据倒序储存在两个数组中,
	//      将最低位存在c[0]中,最高位存在最后 
	for (i = 0; i < m; i++) {
		c[i] = a[m - i - 1] - '0';
	}
	for (i = 0; i < n; i++) {
		d[i] = b[n - 1 - i] - '0';
	}

	k = m > n ? m : n;
	t = k - 1;//   标记最高位 
	for (i = 0; i < k; i++) {
		c[i] += d[i];
		//   考虑是否进位 
		if (c[k - 1] >= 10) t = k;
		if (c[i] >= 10) {
			c[i + 1] += c[i] / 10;
			c[i] %= 10;
		}
	}
	for (i = t; i >= 0; i--) cout<<c[i];//   倒序输出 
	return 0;
}

龟兔赛跑预测

#include<iostream>

using namespace std;

int main()
{
	int v1, v2, t, s, l;
	int temp1 = 0, temp2 = 0,leap = 0,tempt = 0;//第一个用来记录兔子的路程,第二个用来记录乌龟的路程
	cin >> v1 >> v2 >> t >> s >> l;
	while (temp1 < l&&temp2 < l) {
		tempt++;
		temp1 += leap == 0 ? v1 : 0;
		leap = leap > 0 ? leap - 1 : 0;
		temp2 += v2;
		if (temp1 - temp2 >= t && leap==0) {
			leap = s;
		}
	}
	if (temp1 == temp2 && temp1 == l) {
		cout << 'D' << endl;
		cout << l / v2;
		return 0;
	}
	if (temp1 == l) {
		cout << 'R' << endl;
		cout << temp2 / v2;
		return 0;
	}
	else {
		cout << 'T' << endl;
		cout << l / v2;
	}
	return 0;
}

回文数

#include<iostream>

using namespace std;

bool check(int n);

int main()
{
	int i;
	for (i = 1000; i < 10000; i++) {
		if (check(i))
			cout << i << endl;
	}
	return 0;
}

bool check(int n) {
	int temp = 0, temp1 = n;
	if (n % 10 == 0)
		return false;
	while (n > 0) {
		temp = temp * 10 + n % 10;
		n /= 10;
	}
	return temp == temp1;
}

阶乘计算(大数相乘)

#include<iostream>

using namespace std;

void carry(long long fac[]);
void output(long long fac[]);

int main() {
	int n;
	cin >> n;
	long long fac[3000] = {0};
	fac[0] = 1;//初始化阶乘数组
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < 3000; j++) {
			fac[j] *= i;
		}
		carry(fac);//进位
	}
	output(fac);
	return 0;
}

void carry(long long fac[]) {
	int i;
	for (i = 0; i < 2999; i++) {
		if (fac[i] >= 10) {
			fac[i + 1] += fac[i] / 10;
			fac[i] %= 10;
		}
	}
}

void output(long long fac[]) {
	int le = 0;
	for (int i = 2999; i >= 0; i--) {
		if (fac[i] != 0&&!le) {
			le = 1;
			cout << fac[i];
			continue;
		}
		if (le)
			cout << fac[i];
	}
}

矩形面积交(捂脸)方法太笨了,想了想还是发出了

#include<iostream>
#include<math.h>

using namespace std;

int main() {
	double a1, a2, b1, b2, x1, x2, y1, y2,res;
	cin >> a1 >> b1 >> a2 >> b2;
	cin >> x1 >> y1 >> x2 >> y2;
	if (a1<a2&&b1>b2) {
		double temp = b1; b1 = b2; b2 = temp;
	}
	else if (a1 > a2&&b1 > b2) {
		double temp = b1; b1 = b2; b2 = temp;
		temp = a1; a1 = a2; a2 = temp;
	}
	else if (a1 > a2&&b1 < b2) {
		double temp = a1; a1 = a2; a2 = temp;
	}
	if (x1<x2&&y1>y2) {
		double temp = y1; y1 = y2; y2 = temp;
	}
	else if (x1 > x2&&y1 > y2) {
		double temp = y1; y1 = y2; y2 = temp;
		temp = x1; x1 = x2; x2 = temp;
	}
	else if (x1 > x2&&y1 < y2) {
		double temp = x1; x1 = x2; x2 = temp;
	}
	//分五种情况,左上交,右上交,全等,左下交,右下交
	if (a1 == x1 && a2 == x2 && b1 == y1 && b2 == y2) {
		res = fabs((a2 - a1)*(b2 - b1)); 
		printf("%.2lf", res); 
		return 0;
	}
	if (x1 >= a1 && x1 <= a2 && y1 >= b1 && y1 <= b2) {
		res = fabs((a2 - x1)*(b2 - y1)); printf("%.2lf", res); return 0;
	}
	if (x2 >= a1 && x2 <= a2 && y1 >= b1 && y1 <= b2) {
		res = fabs((x2 - a1)*(b2 - y1)); printf("%.2lf", res); return 0;
	}
	if (x2 >= a1 && x2 <= a2 && y2 >= b1 && y2 <= b2) {
		res = fabs((x2 - a1)*(b1 - y2)); printf("%.2lf", res); return 0;
	}
	if (x1 >= a1 && x1 <= a2 && y2 >= b1 && y2 <= b2) {
		res = fabs((a1 - x1)*(b1 - y2)); printf("%.2lf", res); return 0;
	}
	printf("%.2lf", 0.00);
	return 0;
}

输出杨辉三角

#include<iostream>

using namespace std;

int main()
{
	int temp[34][34] = {1};
	int n;
	cin >> n;
	//斜遍历
	for (int i = 0; i < n; i++) {
		temp[i][i] = 1;
		temp[i][0] = 1;
	}
	//列填充
	for (int j = 1; j < n; j++) {
		for (int k = j + 1; k < n; k++) {
			temp[k][j] = temp[k-1][j] + temp[k - 1][j - 1];
		}
	}
	for (int m = 0; m < n; m++) {
		for (int p = 0; p < n; p++) {
			if (temp[m][p])
				cout << temp[m][p] << ' ';
		}
		cout << endl;
	}
	return 0;
}

数列特征

#include<iostream>

using namespace std;

int main()
{
	int n,sum = 0, min = 10000, max = -10000,temp;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> temp;
		if (min > temp)
			min = temp;
		if (max < temp)
			max = temp;
		sum += temp;
	}
	cout << max << endl;
	cout << min << endl;
	cout << sum << endl;
	return 0;
}

水仙花数

#include<iostream>
#include<math.h>

using namespace std;

bool check(int n);

int main()
{
	int i;
	for (i = 100; i < 1000; i++) {
		if (check(i))
			cout << i << endl;
	}
	return 0;
}

bool check(int n)
{
	int temp = 0,temp1 = n;
	while (n) {
		temp = temp + (int)pow(n % 10, 3);
		n /= 10;
	}
	return temp == temp1;
}

特殊回文数

#include<iostream>
#include<string>
#include<cstring> 

using namespace std;

int main()
{
	char fiv[6], six[7];
	string temp1, temp2;
	int i, n, j, temp;
	cin >> n;
	//五位数
	for (i = 10000; i < 100000; i++) {
		temp = 0;
		sprintf_s(fiv, "%d", i);
		temp1 = fiv;
		_strrev(fiv);
		temp2 = fiv;
		if (temp2 == temp1) {
			for (j = 0; j < 5; j++) {
				temp += fiv[j] - '0';
			}
			if (temp == n)
				cout << fiv << endl;
		}
	}
	for (i = 100000; i < 1000000; i++) {
		temp = 0;
		sprintf_s(six, "%d", i);
		temp1 = six;
		_strrev(six);
		temp2 = six;
		if (temp2 == temp1) {
			for (j = 0; j < 6; j++) {
				temp += six[j] - '0';
			}
			if (temp == n)
				cout << six << endl;
		}
	}
	return 0;
}

bool check(int n) {
	int temp = 0, temp1 = n;
	while (n) {
		temp += n % 10;
		temp *= 10;
		n /= 10;
	}
	if (temp == temp1)
		return true;
	return false;
}

完美的代价

#include<iostream>
#include<algorithm>

using namespace std;
int check(char temp[],int n);

int main() {
	char ret[8000];
	int i,j, n,end,cnt = 0;
	cin >> n; end = n - 1;
	for (i = 0; i < n; i++) {
		cin >> ret[i];
	}
	if (check(ret, n)) {
		for (i = 0; i < end; i++) {
			for (j = end; j >= i; j--) {
				if (j == i) {
					cnt += n / 2 - i;
				}
				else if (ret[i] == ret[j]) {
					for (int k = j; k < end; k++) {
						swap(ret[k], ret[k + 1]);
						cnt++;
					}
					end--;break;
				}
			}
		}
		cout << cnt << endl;
	}
	else {
		cout << "Impossible" << endl;
	}
}

int check(char temp[], int n) {
	int count,leap = 0;
	for (int i = 97; i <= 122; i++) {
		count = 0;
		for (int j = 0; j < n; j++) {
			if (temp[j] == i) count++;
		}
		if (count % 2 != 0 && leap > 0) return 0;
		if (count % 2 != 0) {
			leap++; continue;
		}
	}
	return 1;
}

芯片测试

#include<iostream>

using namespace std;

int main()
{
	int res[20][20],n,i,j;
	cin >> n;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			cin >> res[i][j];
		}
	}
	for (i = 0; i < n; i++) {
		res[i][i] = 0;
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			if (res[i][j]) {
				if (res[j][i]) {
					cout << i + 1 << ' ';
					break;
				}
			}
		}
	}
	return 0;
}

质因数分解 混合输出

#include<iostream>

using namespace std;
int check(int i);

int main() {
	int a, b;
	cin >> a >> b;
	for (int i = a; i <= b; i++) {
		if (check(i))
			cout << i << '=' << i << endl;
		else {
			int temp = i;
			cout << i << '=';
			for (int j = 2; j < i; j++) {
				if (temp%j == 0) {
					cout << j; temp /= j; cout << '*';
					while (temp != 1&&temp%j==0) {
						cout << j << '*'; temp /= j;
					}
				}
			}
			printf("\b ");
			cout << endl;
		}
	}
	printf("\b");
	return 0;
}

int check(int i) {
	for (int j = 2; j < i; j++) {
		if (i%j == 0)
			return 0;
	}
	return 1;
}

字母图形 找规律

#include<iostream>
#include<vector>

using namespace std;

int main()
{
	int n, m,k,j;
	cin >> n >> m;
	vector<vector<char> > res(n, vector<char>(m));
	//行填充
	for (int i = 0; i < m; i++) {
		res[0][i] = 'A' + i;
		for (j = 1,k = i+1; j < n&&k < m; j++, k++)
			res[j][k] = res[0][i];
	}
	//列填充
	for (int i = 1; i < n; i++) {
		res[i][0] = 'A' + i%26;
		for (j = i + 1, k = 1; j < n&&k < m; j++, k++)
			res[j][k] = res[i][0];
	}
	//输出
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << res[i][j];
		}
		cout << endl;
	}
	return 0;
}

Fj的字符串

#include<iostream>
#include<string>

using namespace std;

int main() {
	string res = "A",temp = "B";
	int n,i;
	cin >> n;
	for (i = 1; i < n; i++) {
		temp[0] = res[res.size() / 2]+1;
		res = res + temp + res;
	}
	cout << res << endl;
	return 0;
}

Huffuman树 (使用优先级队列进行降序处理)

#include<iostream>
#include<queue>

using namespace std;

class mycmp {
public :
	bool operator() (int a, int b) {
		return a > b;
	}
};

priority_queue<int,vector<int>,mycmp> q;

int main() {
	int n,temp,charge = 0,twosum = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> temp;
		q.push(temp);
	}//全部压入优先级队列中
	while (q.size()!=1) {
		twosum = 0;
		for (int i = 0; i < 2; i++) {
			charge += q.top();
			twosum += q.top();
			q.pop();
		}
		q.push(twosum);
	}
	cout << charge << endl;
	return 0;
}

回形取数

#include<iostream>

using namespace std;

int main() {
	int temp[200][200], m, n;
	int chest;
	cin >> m>>n;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			cin >> temp[i][j];
		}
	}
	for (chest = 0; chest < 200&&temp[m/2][n/2]; chest++) {
		if (!chest % 2) {
			for (int i = 0; i < m - chest/3; i++) {
				if (!temp[i][chest / 3])
					break;
				cout << temp[i][chest / 3] << ' ';
				temp[i][chest / 3] = 0;
			}
		}
		else {
			for (int i = 0; i < n - chest/3; i++) {
				if (!temp[i][chest/3])
					break;
				cout << temp[chest / 3][i]<<' ';
				temp[chest / 3][i] = 0;
			}
		}
	}
	return 0;
}

十六进制转八进制

//数据过于庞大 使用long long 型也远远不能满足条件 化为十进制储存是明显行不通的,
//现在只能是十六进制先转二进制 在由二进制转为八进制。
//第一个是为转化为十进制的
//第二个是转化为二进制随后转化为八进制的
#include<iostream>
#include<string>
#include<math.h>

using namespace std;

int main()
{
	long long n, t = 0, i, ei = 0, j, eig;
	string temp;
	long long eight[10] = { 0 };
	cin >> n;
	for (i = 0; i < n; i++) {
		t = 0; ei = 0; eig = 0;
		cin >> temp;
		for (j = 0; j < temp.size(); j++) {
			t += ((long long)temp[j] >= 65 ? (long long)(temp[j] - 55) : (long long)(temp[j] - 48))*(long long)pow(16, temp.size() - j - 1);
		}
		while (t) {
			ei *= 10;
			ei += t % 8;
			t /= 8;
		}
		while (ei) {
			eig *= 10;
			eig += ei % 10;
			ei /= 10;
		}
		eight[i] = eig;
	}
	for (i = 0; i < n; i++) {
		cout << eight[i] << endl;
	}
	return 0;
}

#include <iostream>
#include <string>
using namespace std;

int main()
{
	int n;
	cin >> n;
	for (int k = 1; k <= n; k++)
	{
		string s1, s2;//s1为输入的原始的十六进制串,s2为转化成的二进制串
		cin >> s1;
		s2 = "";//初始化
		for (int i = 0; i < s1.length(); i++)//遍历,字符串上加上每一位
		{
			switch (s1[i])
			{
			case '0':s2 += "0000"; break;
			case '1':s2 += "0001"; break;
			case '2':s2 += "0010"; break;
			case '3':s2 += "0011"; break;
			case '4':s2 += "0100"; break;
			case '5':s2 += "0101"; break;
			case '6':s2 += "0110"; break;
			case '7':s2 += "0111"; break;
			case '8':s2 += "1000"; break;
			case '9':s2 += "1001"; break;
			case 'A':s2 += "1010"; break;
			case 'B':s2 += "1011"; break;
			case 'C':s2 += "1100"; break;
			case 'D':s2 += "1101"; break;
			case 'E':s2 += "1110"; break;
			case 'F':s2 += "1111"; break;
			default:break;
			}
		}
		int len = s2.length();

		if (len % 3 == 1)//三个二进制为一位八进制,二进制串前面补0,确保二进制串的长度为3的倍数
			s2 = "00" + s2;
		else if (len % 3 == 2)
			s2 = "0" + s2;
		int flag = 0;
		for (int i = 0; i <= s2.length() - 3; i += 3)
		{
			int num = 4 * (s2[i] - '0') + 2 * (s2[i + 1] - '0') + (s2[i + 2] - '0');
			if (num)
				flag = 1;//忽略前导0
			if (flag)
				cout << num;
		}
		cout << endl;
	}
	return 0;
}

十六进制转十进制

#include<iostream>
#include<string>
#include<math.h>

using namespace std;

int main()
{
	long long t = 0, j;
	string temp;
	cin >> temp;
	for (j = 0; j < temp.size(); j++) {
		t += ((long long)temp[j] >= 65 ? (long long)(temp[j] - 55) : (long long)(temp[j] - 48))*(long long)pow(16, temp.size() - j - 1);
	}
	cout << t << endl;
	return 0;
}

数的读法 繁复的判断

#include<iostream>
#include<string>

using namespace std;
string wan(int temp);

int main() {
	int temp = 2000000000;
	string res = "";
	cin >> temp;
	//个位
	res = wan(temp % 10000);
	//万位
	if (temp / 10000) {
		if ((temp % 10000) >= 1000)
			res = wan((temp % 100000000) / 10000) + "wan " + res;
		else if ((temp % 10000) > 0)
			res = wan((temp % 100000000) / 10000) + "wan " + "ling " + res;
		else
			res = wan((temp % 100000000) / 10000) + "wan";
	}
	//亿位
	if (temp / 100000000) {
		if ((temp % 100000000) >= 10000000)
			res = wan(temp / 100000000) + "yi " + res;
		else if ((temp % 100000000) > 0)
			res = wan(temp / 100000000) + "yi " + "ling " + res;
		else
			res = wan(temp / 100000000) + "yi";
	}
	for (int i = 0; i != res.size(); i++) {
		if (res.substr(i, 2) == "yi"&&res.substr(i + 3, 3) == "shi")
			res = res.substr(0, i) + res.substr(i + 3);
	}
	while (res.substr(res.size() - 5, res.size()) == "ling ") {
		res = res.substr(0, res.size() - 5);
	}
	cout << res<< endl;
	return 0;
}

string wan(int temp) {
	string ret[14] = {"ling ", "yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu ","shi ","bai ","qian ","" };
	string res = "";
	int leap = 0,t = temp;
	while (t) {
		t /= 10; leap++;
	}
	if (leap == 1)
		res = ret[temp];
	if (leap == 2)
		res = ret[temp / 10] + ret[10] + ret[temp % 10];
	if (leap == 3) {
		if ((temp % 100) < 10)
			res = ret[temp / 100] + ret[11] + ret[0] + ret[temp % 100];
		else
			res = ret[temp / 100] + ret[11] + ret[(temp % 100) / 10] + ret[10] + ret[temp % 10];
	}
	if (leap == 4) {
		if ((temp % 1000) >= 100) {
			res = ret[temp / 1000] + ret[12]; temp %= 1000;
			if ((temp % 100) < 10)
				res = res + ret[temp / 100] + ret[11] + ret[0] + ret[temp % 100];
			else
				res = res + ret[temp / 100] + ret[11] + ret[(temp % 100) / 10] + ret[10] + ret[temp % 10];
		}
		else {
			res = ret[temp / 1000] + ret[12]; temp %= 1000;
			if (temp >= 10)
				res = res + ret[temp / 10] + ret[10] + ret[temp % 10];
			else
				res = res + ret[0] + ret[temp];
		}
	}
	return res;
}

数列排序 使用库函数

//使用库文件进行排序
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<int> v1;
	int temp;
	while (1) {
		cin >> temp;
		v1.push_back(temp);
		if (cin.get() == '\n')
			break;
	}
	sort(v1.begin(),v1.end());
	for (int i = 0; i < n; i++) {
		cout << v1[i] << ' ';
	}
	return 0;
}


//手动写 选择法排序
#include<iostream>

using namespace std;

int main()
{
	int n, i, j, temp;
	int nums[200];
	cin >> n;
	for (i = 0; i < n; i++) {
		scanf_s("%d", &nums[i]);
	}
	for (i = 0; i < n - 1; i++) {
		temp = i;
		for (j = i + 1; j < n; j++) {
			if (nums[j] < nums[temp]) {
				temp = j;
			}
		}
		int te = nums[temp];
		nums[temp] = nums[i];
		nums[i] = te;
	}
	for (i = 0; i < n; i++) {
		cout << nums[i] << ' ';
	}
	return 0;
}

字符串对比

#include<iostream>
#include<string>

using namespace std;

int main() {
	int i;
	string a, b;
	cin >> a;
	cin >> b;
	if (a.size() != b.size()) cout << 1 << endl;
	else {
		if (a == b) cout << 2 << endl;
		else {
			for (i = 0; i != a.size(); i++) {
				if (toupper(a[i]) != toupper(b[i])) {
					cout << 4; break;
				}
			}
			if (i == a.size()) cout << 3;
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值