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. 完数
//2010年哈尔滨工业大学计算机研究生机试题 完数
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int main() {
    
int i, j, m, n, fg;
    
while(~scanf("%d"&n)) {
        fg 
= 0;
        
for(i = 1; i <= n; ++i) {
            m 
= 0;
            
for(j = 1; j < i; ++j) {
                
if(i % j == 0) m += j;
            }

            
if(m == i) {
                
if(fg) putchar(' ');
                printf(
"%d", i);
                fg 
= 1;
            }

        }

        puts(
"");
    }

    
return 0;
}


2. 数字阶梯求和
   算是小小的高精吧... C++还WA了一次... 忘记初始化了... 然后JAVA水了一下
//2010年哈尔滨工业大学计算机研究生机试题 数字阶梯求和
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int b[1000], a, n;

int main() {
    
int i, cf;
    
while(~scanf("%d %d"&a, &n)) {
        memset(b, 
0sizeof(b));
        
for(i = 0; i < n; ++i) b[i] = a * (n - i);
        cf 
= 0;
        
for(i = 0; i < n; ++i) {
            b[i] 
+= cf;
            cf 
= b[i] / 10;
            b[i] 
%= 10;
        }

        
while(cf) {
            b[i
++= cf % 10;
            cf 
/= 10;
        }

        
for(; !b[i]; --i);
        
for(; i >= 0--i) printf("%d", b[i]);
        puts(
"");
    }

    
return 0;
}


3. 找x
    上sort+二分了... 结果看错题意还WA一次... 数据量暴小, 或许暴力还更快些
//2010年哈尔滨工业大学计算机研究生机试题 找x
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#include
<algorithm>
using namespace std;

struct M{
    
int id, x;
}
p[210];

bool cmp(M a, M b) {
    
return a.x < b.x;
}


int main() {
    
int i, c, f, n;
    
while(~scanf("%d"&n)) {
        
for(i = 0; i < n; ++i) {
            scanf(
"%d"&p[i].x);
            p[i].id 
= i;
        }

        sort(p, p 
+ n, cmp);
        scanf(
"%d"&c);
        
int l = 0, r = n - 1, mid;
        f 
= 0;
        
while(l <= r) {
            mid 
= (l + r) >> 1;
            
if(p[mid].x == c) {
                f 
= 1;
                
break;
            }

            
else if(p[mid].x > c) r = mid - 1;
            
else
                l 
= mid + 1;
        }

        
if(f) printf("%d\n", p[mid].id);
        
else
            puts(
"-1");
    }

    
return 0;
}


4. 互换最大最小数
//2010年哈尔滨工业大学计算机研究生机试题 互换最大最小数
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define INF 0x3f3f3f3f

int mi, ma, fi, fa, n, a[25];

int main() {
    
int i;
    
while(~scanf("%d"&n)) {
        mi 
= INF, ma = -INF;
        
for(i = 0; i < n; ++i) {
            scanf(
"%d"&a[i]);
            
if(a[i] < mi) {
                fi 
= i;
                mi 
= a[i];
            }

            
if(a[i] > ma) {
                fa 
= i;
                ma 
= a[i];
            }

        }

        a[fa] 
^= a[fi] ^= a[fa] ^= a[fi];
        
for(i = 0; i < n-1++i) printf("%d ", a[i]);
        printf(
"%d\n", a[n - 1]);
    }

    
return 0;
}


5. 字符串内排序
//2010年哈尔滨工业大学计算机研究生机试题 字符串内排序
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#include
<algorithm>
using namespace std;

char s[210];

int main() {
    
int l;
    
while(gets(s) != NULL) {
        l 
= strlen(s);
        sort(s, s 
+ l);
        puts(s);
    }

    
return 0;
}


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