WA死在00001 00001这种数据上。。后来同学A了之后对拍半天才发现。。
WA*4。。。
//2005年上海交通大学计算机研究生机试题 数字反转
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int t1, t2, aa, bb, cc, cse, a, b;
while(~scanf("%d", &cse)) {
while(cse--) {
scanf("%d %d", &a, &b);
t1 = a; t2 = b;
aa = bb = cc = 0;
while(t1 > 0) {
aa = aa * 10 + (t1 % 10);
t1/= 10;
}
while(t2 > 0) {
bb = bb * 10 + (t2 % 10);
t2/= 10;
}
t1 = a + b;
while(t1 > 0) {
cc = cc * 10 + (t1 % 10);
t1/= 10;
}
if(aa + bb == cc) printf("%d\n", a + b);
else
puts("NO");
}
}
return 0;
}
2. 路径打印
WA*2+PE*3。。。留份代码供同纠结此题的对拍。。
//2005年上海交通大学计算机研究生机试题 路径打印
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct M {
char s[100];
}p[20];
bool cmp(M a, M b) {
return strcmp(a.s, b.s) < 0;
}
int n;
int main() {
//freopen("d:\\out.txt", "w", stdout);
int i, j, k, h;
while(scanf("%d", &n), n) {
for(i = 0; i < n; ++i) scanf("%s", p[i].s);
sort(p, p + n, cmp);
for(i = 0; p[0].s[i]; ++i) {
if(p[0].s[i] == '\\') {
if(i < strlen(p[0].s) - 1) {
puts("");
for(j = 0; j < i + 1; ++j) putchar(' ');
}
}
else
putchar(p[0].s[i]);
}
for(i = 1; i < n; ++i) {
j = 0;
while(p[i].s[j] && p[i].s[j] == p[i - 1].s[j]) ++j;
while(j > 0 && p[i].s[j] != '\\') --j;
if(p[i].s[j] == '\\') ++j;
for(k = j; p[i].s[k]; ++k) {
if(p[i].s[k] == '\\') {
if(k < strlen(p[i].s) - 1) {
puts("");
for(h = 0; h < k + 1; ++h) putchar(' ');
}
}
else {
if(k == j) {
puts("");
for(h = 0; h < k; ++h) putchar(' ');
}
putchar(p[i].s[k]);
}
}
}
puts("");
puts("");
}
return 0;
}
3. 棋盘游戏
DFS,注意不能只记录每个位置的最小值,要同时记录取到该最小值时的状态,状态,位置相同并且dp值更小才更新
//2005年上海交通大学计算机研究生机试题 棋盘游戏
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INF 0x3f3f3f3f
int d[4][2] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
int dp[6][6][5], a[6][6];
bool ok(int x, int y) {
if(x >= 0 && x < 6 && y >= 0 && y < 6) return 1;
return 0;
}
void DFS(int x, int y, int st, int sum) {
int i, j, tx, ty;
if(~dp[x][y][st] && dp[x][y][st] <= sum) return;
else
dp[x][y][st] = sum;
for(i = 0; i < 4; ++i) {
tx = x + d[i][0];
ty = y + d[i][1];
if(ok(tx, ty)) DFS(tx, ty, st * a[tx][ty] % 4 + 1, sum + st * a[tx][ty]);
}
}
int main() {
int cse, i, j, sx, sy, ex,ey;
scanf("%d", &cse);
while(cse--) {
for(i = 0; i < 6; ++i)
for(j = 0; j < 6; ++j)
scanf("%d", &a[i][j]);
scanf("%d %d %d %d", &sx, &sy, &ex, &ey);
memset(dp, -1, sizeof(dp));
DFS(sx, sy, 1, 0);
int mi = INF;
for(i = 1; i <= 4; ++i) {
if(~dp[ex][ey][i] && dp[ex][ey][i] < mi) mi = dp[ex][ey][i];
}
printf("%d\n", mi);
}
return 0;
}