求助!样例答案一样,第一个测试点的答案一样,为什么25分。
查看原帖
求助!样例答案一样,第一个测试点的答案一样,为什么25分。
264909
broccoli楼主2020/5/10 04:49
#include <cstdio>
using namespace std;
int numchange(char a) {
	switch (a) {
	case '0':return 0; break;
	case '1':return 1; break;
	case '2':return 2; break;
	case '3':return 3; break;
	case '4':return 4; break;
	case '5':return 5; break;
	case '6':return 6; break;
	case '7':return 7; break;
	case '8':return 8; break;
	case '9':return 9; break;
	case 'A':case 'a':return 10; break;
	case 'B':case 'b':return 11; break;
	case 'C':case 'c':return 12; break;
	case 'D':case 'd':return 13; break;
	case 'E':case 'e':return 14; break;
	case 'F':case 'f':return 15; break;
	}
}
char cchange(int b) {
	switch (b) {
	case 0:return '0'; break;
	case 1:return '1'; break;
	case 2:return '2'; break;
	case 3:return '3'; break;
	case 4:return '4'; break;
	case 5:return '5'; break;
	case 6:return '6'; break;
	case 7:return '7'; break;
	case 8:return '8'; break;
	case 9:return '9'; break;
	case 10:return 'a'; break;
	case 11:return 'b'; break;
	case 12:return 'c'; break;
	case 13:return 'd'; break;
	case 14:return 'e'; break;
	case 15:return 'f'; break;
	}
}
int main() {
	int N, i = 0, s = 0, step = 0, s1 = 0;
	bool hj = true;
	char sw[660], sw1[660];
	scanf("%d\n", &N);
	while ((sw[i] = getchar()) != '\n') {
		i++;
	}
	for (int k = 0; k < i; k++) {
		sw1[k] = sw[i - k - 1];
	}
	for (int o = 0; o < i; o++) {
		if (sw[o] != sw1[o]) {
			hj = true;
			break;
		}
		else {
			hj = false;
		}
	}
	while (hj) {
		step++;
		if (step > 30) {
			printf("Impossible!");
			break;
		}
		s = 0;
		for (int l = i - 1; l >= 0; l--) {
			if (l == 0) {
				if ((numchange(sw[l]) + numchange(sw1[l]) + s) / N > 0) {
					for (int j = i - 1; j > 0; j--) {
						sw[j + 1] = sw[j];
					}
					sw[1] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) % N);
					sw[0] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) / N);
					i++;
				}
				else {
					sw[0] = cchange(numchange(sw[l]) + numchange(sw1[l]) + s);
				}
			}
			else {
				if ((numchange(sw[l]) + numchange(sw1[l]) + s) / N > 0) {
					s1 = (numchange(sw[l]) + numchange(sw1[l]) + s) / N;
				}
				else {
					s1 = 0;
				}
				sw[l] = cchange((numchange(sw[l]) + numchange(sw1[l]) + s) % N);
				s = s1;
			}
		}
		for (int k = 0; k < i; k++) {
			sw1[k] = sw[i - k - 1];
		}
		for (int o = 0; o < i; o++) {
			if (sw[o] != sw1[o]) {
				hj = true;
				break;
			}
			else {
				hj = false;
			}
		}
	}
	if (step <= 30) {
		printf("STEP=%d", step);
	}
}

我来解释一下numchange把字符换成数字 cchangge同理 接下来while输入 for得到一个反转的字符串 for检测回文 接下来while进入步数统计 ** 其中有 如果下标为0 判断是否进一位如果进一位则将数据全部后移一位 否则直接输入字符 ** 其他的不多解释

2020/5/10 04:49
加载中...