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題囉~~
留言列表