标签:nbsp mon ini error name col for == bit
前言:无话可说,看懂题意就没什么难度了。
题意:对于[0, 9999]区间内的每一个数b,通过输入的转换表,得到一个e值,把这个值添加到b的后面,得到一个五位数c。对于c的每一位,从0枚举到9,得到50个数。然后,对c的相邻数位两两交换,得到4个数,总共54个数。然后,对于[0, 9999]区间内的每一个数b,在它的54个数中,如果存在一个数(和c不想等),它的check值等于0,那么,这个数b是要被计数的,计数器加1。最后输出计数器的值就OK了。至于其他什么"good","correct",“one or more common errors"之类的,都是绕人的,不用管。T_T我就是被这些字眼坑了,以至于这个题看了几个小时也没完全弄明白。T_T诶,这说白了也是在为自己实力弱找理由。
源代码:
#include<bits/stdc++.h>
using namespace std;
int tab[10][10];
int init[10000];
char alt[10000][55][8];
int tmp[5];
int gete(int x) {
for(int i = 0; i < 4; ++i)tmp[i] = x % 10, x /= 10;
int res = 0;
for(int i = 3; i >= 0; --i)res = tab[res][tmp[i]];
return res;
}
void tochar(char* str, int x) {
for(int i = 0; i < 5; ++i)tmp[i] = x % 10, x /= 10;
for(int i = 4; i >= 0; --i)str[4 - i] = tmp[i] + ‘0‘;
}
int check(char* str) {
for(int i = 0; i < 5; ++i)tmp[4 - i] = str[i] - ‘0‘;
int res = 0;
for(int i = 4; i >= 0; --i)res = tab[res][tmp[i]];
return res;
}
char ch[5];
int main() {
//freopen("input.txt", "r", stdin);
for(int i = 0; i < 10; ++i) {
for(int j = 0; j < 10; ++j)scanf("%d", &tab[i][j]);
}
for(int i = 0; i < 10000; ++i) {
init[i] = i * 10 + gete(i);
}
for(int i = 0; i < 10000; ++i) {
for(int j = 49; j >= 0; --j) {
tochar(alt[i][j], init[i]);
alt[i][j][j / 10] = (9 - j % 10) + ‘0‘;
}
tochar(alt[i][50], init[i]);
swap(alt[i][50][0], alt[i][50][1]);
tochar(alt[i][51], init[i]);
swap(alt[i][51][1], alt[i][51][2]);
tochar(alt[i][52], init[i]);
swap(alt[i][52][2], alt[i][52][3]);
tochar(alt[i][53], init[i]);
swap(alt[i][53][3], alt[i][53][4]);
}
int ans = 0;
for(int i = 0; i < 10000; ++i) {
bool flag = true;
for(int j = 0;j < 54;++j){
if(atoi(alt[i][j]) == init[i])continue;
if(check(alt[i][j]) == 0)flag = false;
}
if(!flag)ans++;
}
printf("%d\n", ans);
return 0;
}
标签:nbsp mon ini error name col for == bit
原文地址:http://www.cnblogs.com/565261641-fzh/p/7635999.html