|
Posted on 2011-08-27 03:07 Uriel 閱讀(290) 評論(0) 編輯 收藏 引用 所屬分類: 考研&保研復試上機題
這套兩道題。。第二道難度可以。。 1. 手機鍵盤 這題竟然木有圖片。。還得找來手機對照。。題目本身木有難度。。
//2008年清華大學計算機研究生機試題 手機鍵盤

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

 int a[] = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4};
 int t[] = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8};
char s[110];

 int main() {
int i, ans;
 while(gets(s) != NULL) {
ans = 0;
 for(i = 0; s[i]; ++i) {
if(!i) ans += a[s[i] - 'a'];
 else {
ans += a[s[i] - 'a'] + 2 * (t[s[i] - 'a'] == t[s[i - 1] - 'a']);
}
}
printf("%d\n", ans);
}
return 0;
}2. 進制轉換 這題木有給范圍。。一開始也沒往那方面想, 總以為是輸出的大小寫不對。。結果WA到哭。。還無恥的上小號亂刷。。主號的AC率從77跌至60+。。 想到可能要用大數之后。。又用JAVA偷懶了。。結果果斷主號和小號墊底。。 膜拜此題用C寫900+B的大牛 8.27: 膜拜完大牛代碼。。果然巧妙。。下次再不偷懶用JAVA了。。
//2008年清華大學計算機研究生機試題 進制轉換

import java.math.*;
import java.util.*;

 public class Main {
 public static void main(String args[]) {
int m, n, i, l, k;
String ss;
char r[] = new char[1000];
char s[] = new char[1000];
BigInteger cnt;
Scanner cin = new Scanner(System.in);
 while(cin.hasNext()) {
m = cin.nextInt();
n = cin.nextInt();
ss = cin.next();
l = ss.length();
s = ss.toCharArray();
cnt = BigInteger.ZERO;
 for(i = 0; i < l; ++i) {
cnt = cnt.multiply(BigInteger.valueOf(m));
if(s[i] >= 'A' && s[i] <= 'Z') cnt = cnt.add(BigInteger.valueOf(s[i] - 'A' + 10));
else if(s[i] >= 'a' && s[i] <= 'z') cnt = cnt.add(BigInteger.valueOf(s[i] - 'a' + 10));
else if(s[i] >= '0' && s[i] <= '9') cnt = cnt.add(BigInteger.valueOf(s[i] - '0'));
}
k = 0;
 if(cnt.compareTo(BigInteger.ZERO) == 0) {
System.out.println("0");
}
 else {
 while(cnt.compareTo(BigInteger.ZERO) > 0) {
int tp = (cnt.mod(BigInteger.valueOf(n))).intValue();
if(tp < 10) r[k] = (char)(tp + '0');
else
r[k] = (char)(tp + 'a' - 10);
++k;
cnt = cnt.divide(BigInteger.valueOf(n));
}
for(i = k - 1; i >= 0; --i) System.out.print(r[i]);
System.out.println("");
}
}
}
}
|