code jam 是google辦的程式設計競賽,

從2008年辦到現在

今年也有約3萬5千多人參加

我手癢也來參ㄧ腳~~

-----

今天來介紹 Qualification Round

時間:  4/6 7:00-4/7 10:00 共27小時作答 

Qualification Round 就是個入場門票

你需要拿到30分(就是2題大小case都過)才有比賽資格

本來想高手雲集,

題目會挺難,

資格賽就會掛掉了

沒想到我很幸運對了2題,拿到40分PASS!

今天就先來介紹第一題吧!!

-----

第一題: Foregone Solution

原文題目請看這:

https://codingcompetitions.withgoogle.com/codejam/round/0000000000051705/0000000000088231

解說:

鍵盤的數字鍵 "4"這鍵壞了,但使用者輸入的數字都會有4

例如:4955,239445.......

所以我們必須要把它拆成A+B

以下為拆解範例:

Input 
 

Output 
 
4
940
4444

  
Case #1: 2 2
Case #2: 852 88
Case #3: 667 3777

總之,要避免掉4這個數字

請問有什麼辦法呢?

 

解法:

既然要避掉4這個數字,其實不困難

我想到的方法就是把所有的4換成3+1,解決~~

例如:49443就拆成39333+10110

這樣就能解決問題了WWW

以下就來分享一下我的程式碼吧!

----

以下程式:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int i,j;
    int T,N;
     int arr[10];
    cin>>T;
    for( i=1;i<=T;i++)
    {
        for(j=0;j<10;j++){arr[j]=-1;}
        cin>>N;
        int tmp=N;
        int count=0;
        while(tmp>0)
        {
            if(tmp%10==4)//餘數為4就記錄下來
            {
                arr[count]=1;
            }
            else{
                arr[count]=0;
            }
            count++;
            tmp=tmp/10;
        }
        int sum=0;
        for(int k=0;k<10;k++)
        {
            if(arr[k]!=-1)//把記錄下來的數字乘10的index次方
            {
                sum=sum+arr[k]*pow(10,k);
            }
            else{break;}
        }
        cout<<"Case #"<<i<<": "<<N-sum<<" "<<sum<<endl;
        
    }
    return 0;
}

這樣就結案啦~第一題pass!

(雖然只拿到16分....不知為何最後1分拿不到,或許有哪一小地方會error

之後再分享第2題囉~~

arrow
arrow

    kyo 發表在 痞客邦 留言(0) 人氣()