挑战本题最长AC题解!!!
查看原帖
挑战本题最长AC题解!!!
1258807
zhangqige楼主2025/1/5 19:27

一、思路

1.while(cin>>a)输入,判断是不是有关单词,是的话用strcat加到一个字符数组中

比如输入:two one

b数组:

下标0123
0401

2.用二维数组temp两个两个的存字符数组b

下标01
004
101

3.用冒泡排序将小的temp[i]移到前面

|下标|0|1|

|:-:|:-:|:-:| |0|0|1| |1|0|4|

4.输出temp,注意前导0不输出

输出结果:104

二、本题的坑

1.找出所有排列方法中最小的一个数

不是你按照顺序输出获取的字符就完了,需要从小到大排序,我用的冒泡排序

2.如果没有关键字的单词,直接输出0

三、上代码(22行)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool cmp(char a[],char b[]) {
	return (a[0]<b[0])||(a[0]==b[0]&&a[1]<b[1]);
}
int main() {
	char a[1000],b[1000]="";
	bool flaga=1;
	while(cin>>a) {
		if(strcmp(a,"one")==0||strcmp(a,"first")==0||strcmp(a,"a")==0) {
			strcat(b,"01");
			flaga=0;
		}
		if(strcmp(a,"One")==0||strcmp(a,"First")==0||strcmp(a,"A")==0) {
			strcat(b,"01");
			flaga=0;
		}
		if(strcmp(a,"two")==0||strcmp(a,"both")==0||strcmp(a,"second")==0) {
			strcat(b,"04");
			flaga=0;
		}
		if(strcmp(a,"Two")==0||strcmp(a,"Both")==0||strcmp(a,"Second")==0) {
			strcat(b,"04");
			flaga=0;
		}
		if(strcmp(a,"three")==0||strcmp(a,"third")==0) {
			strcat(b,"09");
			flaga=0;
		}
		if(strcmp(a,"Three")==0||strcmp(a,"Third")==0) {
			strcat(b,"09");
			flaga=0;
		}
		if(strcmp(a,"four")==0) {
			strcat(b,"16");
			flaga=0;
		}
		if(strcmp(a,"Four")==0) {
			strcat(b,"16");
			flaga=0;
		}
		if(strcmp(a,"five")==0) {
			strcat(b,"25");
			flaga=0;
		}
		if(strcmp(a,"Five")==0) {
			strcat(b,"25");
			flaga=0;
		}
		if(strcmp(a,"six")==0) {
			strcat(b,"36");
			flaga=0;
		}
		if(strcmp(a,"Six")==0) {
			strcat(b,"36");
			flaga=0;
		}
		if(strcmp(a,"seven")==0) {
			strcat(b,"49");
			flaga=0;
		}
		if(strcmp(a,"Seven")==0) {
			strcat(b,"49");
			flaga=0;
		}
		if(strcmp(a,"eight")==0) {
			strcat(b,"64");
			flaga=0;
		}
		if(strcmp(a,"Eight")==0) {
			strcat(b,"64");
			flaga=0;
		}
		if(strcmp(a,"nine")==0) {
			strcat(b,"81");
			flaga=0;
		}
		if(strcmp(a,"Nine")==0) {
			strcat(b,"81");
			flaga=0;
		}
		if(strcmp(a,"ten")==0) {
			strcat(b,"00");
			flaga=0;
		}
		if(strcmp(a,"Ten")==0) {
			strcat(b,"00");
			flaga=0;
		}
		if(strcmp(a,"eleven")==0) {
			strcat(b,"21");
			flaga=0;
		}
		if(strcmp(a,"Eleven")==0) {
			strcat(b,"21");
			flaga=0;
		}
		if(strcmp(a,"twelve")==0) {
			strcat(b,"44");
			flaga=0;
		}
		if(strcmp(a,"Twelve")==0) {
			strcat(b,"44");
			flaga=0;
		}
		if(strcmp(a,"thirteen")==0) {
			strcat(b,"69");
			flaga=0;
		}
		if(strcmp(a,"Thirteen")==0) {
			strcat(b,"69");
			flaga=0;
		}
		if(strcmp(a,"fourteen")==0) {
			strcat(b,"96");
			flaga=0;
		}
		if(strcmp(a,"Fourteen")==0) {
			strcat(b,"96");
			flaga=0;
		}
		if(strcmp(a,"fifteen")==0) {
			strcat(b,"25");
			flaga=0;
		}
		if(strcmp(a,"Fifteen")==0) {
			strcat(b,"25");
			flaga=0;
		}
		if(strcmp(a,"sixteen")==0) {
			strcat(b,"56");
			flaga=0;
		}
		if(strcmp(a,"Sixteen")==0) {
			strcat(b,"56");
			flaga=0;
		}
		if(strcmp(a,"seventeen")==0) {
			strcat(b,"89");
			flaga=0;
		}
		if(strcmp(a,"Seventeen")==0) {
			strcat(b,"89");
		}
		if(strcmp(a,"eighteen")==0) {
			strcat(b,"24");
			flaga=0;
		}
		if(strcmp(a,"Eighteen")==0) {
			strcat(b,"24");
			flaga=0;
		}
		if(strcmp(a,"nineteen")==0) {
			strcat(b,"61");
			flaga=0;
		}
		if(strcmp(a,"Nineteen")==0) {
			strcat(b,"61");
			flaga=0;
		}
		if(strcmp(a,"twenty")==0) {
			strcat(b,"00");
			flaga=0;
		}
		if(strcmp(a,"Twenty")==0) {
			strcat(b,"00");
			flaga=0;
		}
		if(strcmp(a,"another")==0) {
			strcat(b,"01");
			flaga=0;
		}
		if(strcmp(a,"Another")==0) {
			strcat(b,"01");
			flaga=0;
		}
	}
	if(flaga){
		cout<<0;
		return 0;
	}
	int lb=strlen(b);
	bool flag=1;
	int lt=lb/2;
	char temp[100][10];
	int x=0,y=0;
	for(int i=0; i<lb; i++) {
		if(y<=1) {
			temp[x][y++]=b[i];
		} else {

			x++;
			y=0;
			temp[x][y++]=b[i];
		}
	}
	for(int i=0; i<lb; i++) {
		temp[i][2]='\0';
	}
	//冒泡排序
	for(int i=0; i<lt-1; i++) {
		for(int j=0; j<lt-i-1; j++) {
			if(temp[j][0]>temp[j+1][0]||temp[j][0]==temp[j+1][0]&&temp[j][1]>temp[j+1][1]) {
				char tt[100]="\0";
				strcpy(tt,temp[j]);
				strcpy(temp[j],temp[j+1]);
				strcpy(temp[j+1],tt);
			}
		}
	}
	bool rt=1;
	for(int i=0; i<lt; i++) {
		for(int j=0; j<2; j++) {
			if(temp[i][j]=='0'&&rt) {
				continue;
			}else{
				rt=0;
				cout<<temp[i][j];
			}
		}
	}
	return 0;
}
2025/1/5 19:27
加载中...