[解題] 高中生程式解題系統(解答篇2)

網址:http://zerojudge.tw/
網站介紹:http://it-easy.tw/zerojudge/

目前解答有以下:
a054 a058 a059 a065 a095 a104 a121 a147 
a148 a149 a215 a216 a224 a225

a054: 電話客服中心http://zerojudge.tw/ShowProblem?problemid=a054
#include <cstdlib>
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

char Word (int ww)
{
    char a;
    switch (ww)
        {
           case 10: a='A'; break;
           case 11: a='B'; break;
           case 12: a='C'; break;
           case 13: a='D'; break;
           case 14: a='E'; break;
           case 15: a='F'; break;
           case 16: a='G'; break;
           case 17: a='H'; break;
           case 34: a='I'; break;
           case 18: a='J'; break;
           case 19: a='K'; break;
           case 20: a='L'; break;
           case 21: a='M'; break;
           case 22: a='N'; break;
           case 35: a='O'; break;
           case 23: a='P'; break;
           case 24: a='Q'; break;
           case 25: a='R'; break;
           case 26: a='S'; break;
           case 27: a='T'; break;
           case 28: a='U'; break;
           case 29: a='V'; break;
           case 32: a='W'; break;
           case 30: a='X'; break;
           case 31: a='Y'; break;
           case 33: a='Z'; break;
        }
    return a;
}

int main(int argc, char *argv[])
{
    string a;
    int b[]= {10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
    while(getline(cin,a))
    {
        int check=0;
        int j=8;
        for (int i=0; i <= 8 ; i++)
        {
            check = check + (a[i]-48)*j ;
            j--;
        }

        for(int i = 0 ; i<=25 ; i++)
        {
            if((a[8]-48) != 0)
            {
                int y;
                y = (b[i]/10)+((b[i]%10)*9);
                int x;
                x = check + y;
                if((x % 10) == 10 -(a[8]-48))
                    cout << Word(b[i]) ;
            }else{
                int y;
                y = (b[i]/10)+((b[i]%10)*9);
                int x;
                x = check + y;
                if((x % 10) == 0)
                    cout << Word(b[i]);
            }
        }
        cout << endl;
    }
    return EXIT_SUCCESS;
}

a058: MOD3http://zerojudge.tw/ShowProblem?problemid=a058
這題題意是:先輸入一個數字,比方說 5,表示你接下來即將輸入五個數字
接著,輸入的五個數字中,有多少個是 餘數是3、多少個 餘數是3+1、多少個 餘數是 3+2
#include <iostream>

using namespace std;

int main()
{
    int c;
    int i=0;
    int j=0;
    int k=0;
    cin >> c;
    while (c--)
    {
        int g;
        cin >> g;
        if(g%3==0)
            i++;
        if(g%3==1)
            j++;
        if(g%3==2)
            k++;
    }
    cout << i <<" " << j << " " << k << endl;
    system("PAUSE");
    return 0;
}

a059: 完全平方和http://zerojudge.tw/ShowProblem?problemid=a059
#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    int y=0;
    int yy[32];
    for(int i = 1 ; i <=32;i++)
    {
        if (i*i <1000)
        {
            yy[y]=i*i;
            y++;
        }
    }

    int c;
    cin >> c;
    int d=c*2;
    int g[d];
    int e=0;
    while (d--)
    {
        cin >> g[e];
        e++;
    }
    int Case =1;
    for(int i=0 ; i <(c*2);i=i+2)
    {
        int xx=0;
        for(int j=g[i]; j<=g[i+1];j++)
        {
            for(int k =0 ; k < 32;k++)
            {
                if(j==yy[k])
                 xx=xx+j;
            }
        }
        cout << "Case " <<Case<<": "<<xx<<endl;
        Case++;
    }
    
    return 0;
}

a065: 提款卡密碼http://zerojudge.tw/ShowProblem?problemid=a065
#include <cstdlib>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    string a;
    while(cin >> a)
    {
        for(int i=0 ; i<a.length()-1; i++)
            cout<< abs(a[i]-a[i+1]);
        
        cout << endl;
    }
    return 0;
}

a095: 麥哲倫的陰謀http://zerojudge.tw/ShowProblem?problemid=a095
這題還蠻奇怪的...解答很簡單,白帽子的人都等到紅帽子的走光才會離開
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int a,b;
    while(cin >> a >> b)
    {
        if (a==b)
            cout << b;
        else
            cout << b + 1;
        cout << endl;
    }
    system("PAUSE");
    return 0;
}

a104: 排序http://zerojudge.tw/ShowProblem?problemid=a104
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int a;
    while(cin >> a)
    {
        int b[a];
        int c=0;
        while(a--)
        {
            cin >> b[c];
            c++;
        }
        for(int i=0 ; i<c;i++)
            for(int j=i+1; j<c;j++)
                if(b[j] <= b[i])
                {
                    int temp=0;
                    temp=b[i];
                    b[i]=b[j];
                    b[j]=temp;
                }
        for(int i=0 ; i<c; i++)
            cout << b[i] <<" ";
        cout << endl;
    }
    return 0;
}

a121: 質數又來囉 http://zerojudge.tw/ShowProblem?problemid=a121
這題建議把運算是不是質數的副程式拿出來另外做,另外運算只需要算到某數的平方根即可

#include <iostream>
//#include <String>
#include <math.h>
using namespace std;

int Prime(int in)
{
    int check=0;
    for(int i=2 ; i <=sqrt(in);i++)
    {
        if(in % i == 0)
        {
            check=1;
            break;
        }
    }
    if (in==1)
        check=1;
    return check;
}

int main(int argc, char *argv[])
{
    int a,b;
    while(cin >> a >> b)
    {
        int p=0;
        for(int i = a ; i <= b ; i ++)
        {
            if(Prime(i)==0)
                p++;
        }
        cout << p << endl;
    }
    return 0;
}

a147: Print it all http://zerojudge.tw/ShowProblem?problemid=a147
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int a;
    while(cin>> a)
    {
        if( a==0)
            break;

        for (int i=1 ; i < a; i++)
        {
            if(i%7==0)
                continue;
            cout << i << " ";
        }
        cout << endl;
    }
    return 0;
}

a148: You Cannot Pass?!http://zerojudge.tw/ShowProblem?problemid=a148
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int a;
    while(cin >> a)
    {
       int b[a];
       int c = a;
       int z=0;
       while(a--)
       {
            cin >> b[z];
            z++;
       }
       float total=0;
       for(int i=0 ;i<c;i++)
       {
            total=total+b[i];
       }
       if ((total / c)>59)
        cout <<"no"<< endl;
        else
        cout <<"yes"<< endl;
    }
    return 0;
}


a149: 乘乘樂 http://zerojudge.tw/ShowProblem?problemid=a149
禁止使用string
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int a = 0;
    cin >> a;
    int g[a];
    int L=0;
    while(a--)
    {
        char s[11]; //利用char矩陣來做
        cin >> s;   //輸入字串
        int b=0,sum=1;
        for(b=0;s[b]!=0; b++) //開始計算,直到字串遇到0就跳出迴圈
            sum *= s[b]-'0';
        g[L]=sum;
        L++;
    }
    for(int i=0;i<L;i++)
        cout << g[i] << endl;
    return 0;
}


a215: 明明愛數數http://zerojudge.tw/ShowProblem?problemid=a215
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
    int a,b;
    while(cin >> a >> b)
    {
        int i;
        int sum =0;
        for(i=0 ; i <= 99999 ; ++i)
        {
            sum = sum + (a + i);
            if( sum > b)
                break;
        }
        cout << i+1 << endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

a216: 數數愛明明http://zerojudge.tw/ShowProblem?problemid=a216
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
    long long int a;
    while(cin >> a)
    {
        long long f1=0;
        long long f2=0;
        for ( long long int i=0 ; i <= a ; i++)
        {
            f1= f1 + i;
            f2= f1+f2;
        }
        cout<<f1 <<" " << f2 ;
        cout << endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
a224: 明明愛明明 http://zerojudge.tw/ShowProblem?problemid=a224
直接計算字串內每個字母有多少個,接著只要超過兩個字母以上是奇數,就不能迴圈
#include <cstdlib>
#include <iostream>
#include<stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
    char s[1001];
    while(gets(s))
    {
        int num[26]={};
        for(int i=0;s[i]!=0;i++)
        {
            if(s[i]>='A' && s[i]<='Z')
               num[s[i]-'A']=num[s[i]-'A']+1;
            else if(s[i]>='a' && s[i]<='z')
               num[s[i]-'a']=num[s[i]-'a']+1;
        }
        int check=0;
        for(int i=0;i<26;i++)
            check += num[i]%2;      

        if(check >1)
            cout<<"no..."<<endl;
        else
            cout<<"yes !"<<endl;
    }
    return EXIT_SUCCESS;
}
a225: 明明愛排列 http://zerojudge.tw/ShowProblem?problemid=a225
總共三個階段:輸入、排列個位數、個位數相同時排列大小
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{

    int a;
    while(cin >> a)
    {
        if( cin.eof() ) 
            break;

        int b[a];
        int c=0;
        while(a--) 
        {
            cin >> b[c];
            c++;
        }

        for(int i=0;i<c ;i++) 
        {
            for(int j=i+1; j<c ; j++)
            {
                int temp=0;
                if(b[i]%10 > b[j]%10)
                {
                    temp = b[i];
                    b[i]=b[j];
                    b[j]=temp;
                }
            }
        }

        for(int i=0;i<c ;i++) 
        {
            for(int j=i+1; j<c ; j++)
            {
                int temp=0;
                if((b[i]%10 == b[j]%10) && (b[i]<b[j]) )
                {
                    temp = b[i];
                    b[i]=b[j];
                    b[j]=temp;
                }
            }
        }

        for(int i=0;i<c ;i++) 
            cout << b[i]<<" ";

        cout << endl;
    }
    return EXIT_SUCCESS;
}

提醒

本站內容即日起將轉到另一站上轉跳~