Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
这套两道题。。第二道难度可以。。

1. 手机键盘
    这题竟然木有图片。。还得找来手机对照。。题目本身木有难度。。
//2008年清华大学计算机研究生机试题 手机键盘

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

int a[] = {12312312312312312341231234};
int t[] = {11122233344455566667778888};
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(
"");
            }

        }

    }

}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理