• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Uriel's Corner

            Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
            posts - 0, comments - 50, trackbacks - 0, articles - 594
                發(fā)指啊... 第一次快寫(xiě)完了結(jié)果傲游掛了... ...直接全部重來(lái)啊... ...OMG
                   
                這套比2005年的稍難, 不過(guò)基本都是小模擬啦, 對(duì)ACM菜鳥(niǎo)來(lái)說(shuō)都是大水題~~

            1. 還是A+B
                注意題目第三個(gè)case, 8的前面全當(dāng)成0, 所以108和8的前兩位看作相同的
                我的方法很WS, 因?yàn)轭}目說(shuō)不超過(guò)8位, 就先把不足8位的數(shù)字串補(bǔ)足8位, 高位全填0, 然后從后面開(kāi)始比較k位就ok了~
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年 還是A+B
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>

            int k, s1, s2, l1, l2;
            char a[10], b[10];

            int cal(char *s) {
                
            int i, t = 0;
                
            for(i = 0; s[i]; ++i) t = t * 10 + s[i] - '0';
                
            return t;
            }


            int main() {
                
            int i;
                
            while(1{
                    scanf(
            "%s %s %d", a, b, &k);
                    
            if(!strcmp(a, "0"&& !strcmp(b, "0")) break;
                    l1 
            = strlen(a); l2 = strlen(b);
                    
            for(i = 7; i > 7 - l1; --i) a[i] = a[l1 + i - 8];
                    
            for(i = 0; i <= 7 - l1; ++i) a[i] = '0';
                    
            for(i = 7; i > 7 - l2; --i) b[i] = b[l2 + i - 8];
                    
            for(i = 0; i <= 7 - l2; ++i) b[i] = '0';
                    
            if(!strncmp(a + 8 - k,b + 8 - k, k)) {
                        puts(
            "-1");
                        
            continue;
                    }

                    s1 
            = cal(a); s2 = cal(b);
                    printf(
            "%d\n", s1 + s2);
                }

                
            return 0;
            }


            2. 火星A+B
                一開(kāi)始理解錯(cuò)題意了, 不過(guò)應(yīng)該不會(huì)有人跟我有一樣NC的理解吧... = = ...就不說(shuō)了
                有點(diǎn)像高精度加法, 一位位加就好了, 注意進(jìn)制, 先打出100以?xún)?nèi)的質(zhì)數(shù)表(保險(xiǎn)起見(jiàn)多打了兩個(gè))
                開(kāi)始一處初始化忘了, WA三次才發(fā)現(xiàn)... ...
                PS: Discuss驚現(xiàn)ECUST-SJTU---ssjia大牛, 各種Orz
                2011.09.17 PS: 這題九度上死活過(guò)不了啊... 求交流
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年 火星A+B
            #include<ctype.h>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #include
            <algorithm>
                
            using namespace std;

            int bas[] = {2357111317192329313741434753596167717379838997101103};
            int a[30], b[30], c[30], l1, l2;
            char s1[300], s2[300];

            int main() {
                
            int i, tn1, tn2, tp;
                
            while(1{
                    scanf(
            "%s %s", s1, s2);
                    
            if(!strcmp(s1, "0"&& !strcmp(s2, "0")) break;
                    l1 
            = strlen(s1);
                    l2 
            = strlen(s2);
                    memset(a, 
            0sizeof(a));
                    memset(b, 
            0sizeof(b));
                    memset(c, 
            0sizeof(c));
                    tn1 
            = tn2 = 0; tp = 1;
                    
            for(i = l1 - 1; i >= 0--i) {
                        
            if(s1[i] == ','{
                            tn1
            ++;
                            tp 
            = 1;
                        }

                        
            else if(isdigit(s1[i])) {
                            a[tn1] 
            = a[tn1] + tp * (s1[i] - '0');
                            tp 
            *= 10;
                        }

                    }

                    tp 
            = 1;
                    
            for(i = l2 - 1; i >= 0--i) {
                        
            if(s2[i] == ','{
                            tn2
            ++;
                            tp 
            = 1;
                        }

                        
            else if(isdigit(s2[i])) {
                            b[tn2] 
            = b[tn2] + tp * (s2[i] - '0');
                            tp 
            *= 10;
                        }

                    }

                    
            int cf = 0;
                    
            for(i = 0; i <= min(tn1, tn2); ++i) {
                        c[i] 
            = cf + a[i] + b[i];
                        
            if(c[i] >= bas[i]) {
                            cf 
            = c[i] / bas[i];
                            c[i] 
            %= bas[i];
                        }

                        
            else
                            cf 
            = 0;
                    }

                    
            for(;i <= max(tn1, tn2); ++i) {
                        
            if(i <= tn1) {
                            c[i] 
            = cf + a[i];
                            
            if(c[i] >= bas[i]) {
                                cf 
            = c[i] / bas[i];
                                c[i] 
            %= bas[i];
                            }

                            
            else
                                cf 
            = 0;
                        }

                        
            else if(i <= tn2) {
                            c[i] 
            = cf + b[i];
                            
            if(c[i] >= bas[i]) {
                                cf 
            = c[i] / bas[i];
                                c[i] 
            %= bas[i];
                            }

                            
            else
                                cf 
            = 0;
                        }

                    }

                    c[i] 
            += cf;
                    
            if(c[i] >= bas[i]) {
                        cf 
            = c[i] / bas[i];
                        c[i] 
            %= bas[i];
                    }

                    
            else
                        cf 
            = 0;
                    
            if(cf) c[++i] = cf;
                    
            while(c[i] == 0 && i > 0--i;
                    
            for(; i > 0--i) printf("%d,", c[i]);
                    printf(
            "%d\n", c[0]);
                }

                
            return 0;
            }


            3. 還是暢通工程
                模板題, 不解釋

            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年 還是暢通工程
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 110
            #define INF 0x3f3f3f3f

            int n, adj[N][N], lowcost[N], closest[N];

            void prim(int c[][N]) {
                
            bool s[N];
                s[
            1= true;
                
            for(int i = 2; i <= n; ++i) {
                    lowcost[i] 
            = c[1][i];
                    closest[i] 
            = 1;
                    s[i] 
            = false;
                }

                
            for(int i = 1; i < n; ++i) {
                    
            int mix = INF, j = 1;
                    
            for(int k = 2; k <= n; ++k)
                        
            if(lowcost[k] < mix && !s[k]) {
                            mix 
            = lowcost[k];
                            j 
            = k;
                        }

                        s[j] 
            = true;
                        
            for(int k = 2; k <= n; ++k)
                            
            if(c[j][k] < lowcost[k] && !s[k]) {
                                lowcost[k] 
            = c[j][k];
                                closest[k] 
            = j;
                            }

                }

            }


            int main() {
                
            int i, j, ans, a, b, c;
                
            while(scanf("%d"&n), n) {
                    
            for(i = 1; i <= n * (n - 1/ 2++i) {
                        scanf(
            "%d %d %d"&a, &b, &c);
                        adj[a][b] 
            = adj[b][a] = c;
                    }

                    prim(adj);
                    ans 
            = 0;
                    
            for(i = 1; i <= n; ++i) ans += lowcost[i];
                    printf(
            "%d\n", ans);
                }

                
            return 0;
            }



            4. 統(tǒng)計(jì)同成績(jī)學(xué)生人數(shù)
                大水題, 不解釋

            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年 統(tǒng)計(jì)同成績(jī)學(xué)生人數(shù)
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 1010

            int a[N], n, ans;

            int main() {
                
            int x, i;
                
            while(scanf("%d"&n), n) {
                    
            for(i = 0; i < n; ++i) scanf("%d"&a[i]);
                    scanf(
            "%d"&x);
                    ans 
            = 0;
                    
            for(i = 0; i < n; ++i)
                        
            if(a[i] == x) ans++;
                    printf(
            "%d\n", ans);
                }

                
            return 0;
            }



            5. 簡(jiǎn)單計(jì)算器
                我的方法比較麻煩... ...設(shè)置兩個(gè)棧(偷懶用了STL, 慢就慢吧...||), 一個(gè)符號(hào)棧, 一個(gè)操作數(shù)棧
                當(dāng)讀進(jìn)操作數(shù)時(shí), 若符號(hào)棧棧頂為*或/, 就馬上計(jì)算掉, 彈出操作數(shù)棧棧頂連續(xù)兩個(gè)元素和符號(hào)棧棧頂, 算好之后結(jié)果壓進(jìn)操作數(shù)棧, 這里注意下運(yùn)算順序, '-','/'都是有計(jì)算順序要求的
                當(dāng)讀到運(yùn)算符時(shí), 什么都不管, 直接壓進(jìn)符號(hào)棧
                最后把操作數(shù)棧和符號(hào)棧元素全部倒置(稍微想想就知道為什么了, 一開(kāi)始這里沒(méi)想清楚, 單步了好一會(huì)兒才發(fā)現(xiàn)... ...), 然后不斷彈出符號(hào)棧棧頂符號(hào)和操作數(shù)棧頂連續(xù)兩個(gè)操作數(shù), 計(jì)算完后結(jié)果壓入操作數(shù)棧, 直至符號(hào)棧為空.

            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年 簡(jiǎn)單計(jì)算器
            #include<stack>
            #include
            <ctype.h>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            using namespace std;

            double cal(double a, double b, char c) {
                
            if(c == '+'return a + b;
                
            if(c == '-'return a - b;
                
            if(c == '*'return a * b;
                
            if(c == '/'return a / b;
            }


            int main() {
                
            int i;
                
            char op[210];
                
            while(gets(op), strcmp(op, "0"!= 0{
                    i 
            = 0;
                    stack
            <double> opa;
                    stack
            <char> opr;
                    
            while(op[i]) {
                        
            if(isdigit(op[i])) {
                            
            double tp = 0.0;
                            
            while(isdigit(op[i])) {
                                tp 
            = tp * 10 + op[i] - '0';
                                
            ++i;
                            }

                            opa.push(tp);
                            
            if(!opr.empty() && opr.top() == '*'{
                                opr.pop();
                                
            double t1 = opa.top(); opa.pop();
                                
            double t2 = opa.top(); opa.pop();
                                opa.push(cal(t2, t1, 
            '*'));
                            }

                            
            else if(!opr.empty() && opr.top() == '/'{
                                opr.pop();
                                
            double t1 = opa.top(); opa.pop();
                                
            double t2 = opa.top(); opa.pop();
                                opa.push(cal(t2, t1, 
            '/'));
                            }

                        }

                        
            else if(op[i] == '+'{
                            opr.push(
            '+');
                            
            ++i;
                        }

                        
            else if(op[i] == '-'{
                            opr.push(
            '-');
                            
            ++i;
                        }

                        
            else if(op[i] == '*'{
                            opr.push(
            '*');
                            
            ++i;
                        }

                        
            else if(op[i] == '/'{
                            opr.push(
            '/');
                            
            ++i;
                        }

                        
            else
                            
            ++i;
                    }

                    stack
            <char>opr1;
                    stack
            <double>opa1;
                    
            while(!opr.empty()) {
                        opr1.push(opr.top());
                        opr.pop();
                    }

                    
            while(!opa.empty()) {
                        opa1.push(opa.top());
                        opa.pop();
                    }

                    
            while(!opr1.empty()) {
                        
            double t1 = opa1.top(); opa1.pop();
                        
            double t2 = opa1.top(); opa1.pop();
                        opa1.push(cal(t1, t2, opr1.top()));
                        opr1.pop();
                    }

                    printf(
            "%.2lf\n", opa1.top());
                }

                
            return 0;
            }


            2011.09.10 PS: 這題又用了另一種方法做
                 遇到數(shù)字的時(shí)候不處理, 直接壓入操作數(shù)棧, 遇到'*'或'/'時(shí), 操作符棧頂連續(xù)的'*'或'/'都計(jì)算掉, 再將自己壓入操作符棧, 遇到'+'或'-'時(shí), 操作符棧里的都能計(jì)算掉, 計(jì)算完后再將自己壓入操作符棧, 最后將操作符棧從棧頂依次處理即可, 因?yàn)榇藭r(shí)不會(huì)出現(xiàn)多個(gè)'+''-', '*''/'相連導(dǎo)致運(yùn)算順序錯(cuò)誤的情況
                 本來(lái)以為這樣很方便, 結(jié)果代碼比原來(lái)長(zhǎng)了快一倍... (因?yàn)閷?xiě)得挫... )
                 其實(shí)像書(shū)上那樣加入結(jié)束字符再處理的話代碼應(yīng)該會(huì)短一些... 有空再敲一次

            //2006年浙江大學(xué)計(jì)算機(jī)及軟件工程研究生機(jī)試題 簡(jiǎn)單計(jì)算器
            #include<ctype.h>
            #include
            <stack>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            using namespace std;

            double cal(double a, double b, char c) {
                
            if(c == '+'return a + b;
                
            if(c == '-'return a - b;
                
            if(c == '*'return a * b;
                
            if(c == '/'return a / b;
            }


            int main() {
                
            int i;
                
            char op[220];
                
            while(gets(op), strcmp(op, "0")) {
                    i 
            = 0;
                    stack
            <double> opa;
                    stack
            <char> opr;
                    
            while(op[i]) {
                        
            if(isdigit(op[i])) {
                            
            double tp = 0.0;
                            
            while(isdigit(op[i])) {
                                tp 
            = tp * 10 + op[i] - '0';
                                
            ++i;
                            }

                            opa.push(tp);
                        }

                        
            else if(op[i] == '+'{
                            
            if(opr.empty()) opr.push('+');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '+'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opr.pop();
                                        opa.push(cal(t2, t1, 
            '+'));
                                    }

                                    
            else if(opr.top() == '-'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '-'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                }

                                opr.push(
            '+');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '-'{
                            
            if(opr.empty()) opr.push('-');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '-'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '-'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '+'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '+'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                }

                                opr.push(
            '-');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '*'{
                            
            if(opr.empty()) opr.push('*');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                    
            else
                                        
            break;
                                }

                                opr.push(
            '*');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '/'{
                            
            if(opr.empty()) opr.push('/');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else
                                        
            break;
                                }

                                opr.push(
            '/');
                            }

                            
            ++i;
                        }

                        
            else
                            
            ++i;
                    }

                    
            while(!opr.empty()) {
                        
            double t1 = opa.top(); opa.pop();
                        
            double t2 = opa.top(); opa.pop();
                        opa.push(cal(t2, t1, opr.top()));
                        opr.pop();
                    }

                    printf(
            "%.2lf\n", opa.top());
                }

                
            return 0;
            }


             

            Feedback

            # re: 浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評(píng)論   

            2012-03-02 10:49 by
            最后把操作數(shù)棧和符號(hào)棧元素全部倒置(稍微想想就知道為什么了, 一開(kāi)始這里沒(méi)想清楚, 單步了好一會(huì)兒才發(fā)現(xiàn)... ...),
            為什么???還是沒(méi)想明白,盼能解答

            # re: 浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評(píng)論   

            2012-03-02 14:16 by Uriel
            @毛
            因?yàn)樽詈笾皇<訙p法,加減法是從左到右依次計(jì)算,而在進(jìn)棧時(shí)是從左到右進(jìn)棧的,出棧順序與入棧相反,直接出棧一個(gè)計(jì)算一個(gè)的話就變成是從右到左計(jì)算了,所以倒置一下。。(不過(guò)這種做法很挫就是了。。= =)

            # re: 浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評(píng)論   

            2012-03-02 14:26 by
            哦,想通了。一下子腦子短路了,好笨?。。?!我也想的是這個(gè)方法,嘿嘿??擅看翁峤欢际荳A,看了帖子才知道錯(cuò)在這了,謝謝~~~

            # re: 浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評(píng)論   

            2012-03-02 14:30 by Uriel
            @毛
            表示我當(dāng)時(shí)debug了半天才發(fā)現(xiàn)。。= =
            感覺(jué)做題之前還是該拿筆算算,想想清楚。。
            精品久久久噜噜噜久久久| 国产精品亚洲美女久久久| 97久久精品国产精品青草| 一级做a爰片久久毛片人呢| 久久亚洲高清综合| 99久久99久久精品国产片果冻| 99久久777色| 欧美国产成人久久精品| 少妇高潮惨叫久久久久久| 伊人久久综合热线大杳蕉下载| 日产久久强奸免费的看| 久久精品国产亚洲AV无码麻豆| 久久精品国产亚洲7777| 亚洲色大成网站www久久九| 狠狠色丁香婷综合久久| 久久婷婷国产剧情内射白浆| 香港aa三级久久三级| 99蜜桃臀久久久欧美精品网站 | 一本综合久久国产二区| 波多野结衣中文字幕久久| 久久性生大片免费观看性| 国产亚洲色婷婷久久99精品| 久久人妻少妇嫩草AV蜜桃| 国内精品人妻无码久久久影院 | 久久精品免费一区二区三区| 久久精品综合网| 亚洲欧美日韩精品久久| 亚洲AV日韩AV天堂久久| 久久综合色之久久综合| 91久久精一区二区三区大全| 久久久久久伊人高潮影院| 国产视频久久| jizzjizz国产精品久久| 久久天天躁狠狠躁夜夜avapp| 国产香蕉97碰碰久久人人| 成人国内精品久久久久一区| 中文字幕无码精品亚洲资源网久久| 国产精品无码久久综合网| 久久精品国产精品青草| 奇米影视7777久久精品| 久久国产AVJUST麻豆|