「AOJ再挑戦61~65」の編集履歴(バックアップ)一覧はこちら

AOJ再挑戦61~65」(2014/01/30 (木) 09:36:32) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*問61 Rank Checker http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0061 整理番号とスコア。 スコアとランクを対応付けるだけです。 コードが冗長ですね、もうちょっと刈り取れそうです。 #include<stdio.h> const int MAX=31; const int TMAX=101; int main(){ int ranks[MAX]={0},scores[TMAX],no,score; while(1){ scanf("%d,",&no); scanf("%d",&score); if(no==0&&score==0)break; scores[no]=score; ranks[scores[no]]++; } int rank=0; for(int i=MAX-1;i>=0;i--){ if(ranks[i]>0)rank++; ranks[i]=rank; } while(scanf("%d",&no)!=EOF){ printf("%d\n",ranks[scores[no]]); } } *問62 What is the Bottommost? http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0062 逆パスカルの三角形風味の問題。 解法 定義通り計算するだけ。 1 1 1 1 2 1 、、、、 で一発で求める式もあるけれどめんどくさいですね。 #include<stdio.h> int main(){ char text[11]; while(scanf("%s",text)!=EOF){ for(int i=9;i>=1;i--){ for(int j=0;j<i;j++){ text[j]=((text[j]-'0')+(text[j+1]-'0'))%10+'0'; } } printf("%c\n",text[0]); } } *問63 Palindrome http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0063 文字列が回文になってるか判定して数える問題。 簡単な問題なので書くこと特になし。 まあstlのアルゴリズムもぼちぼち使えるようにならないとな。 #include<stdio.h> #include<string> #include<algorithm> #include<iostream> int main(){ std::string str,strRev; int ans=0; while(std::cin>>str){ if(std::cin.eof())break; strRev=str; std::reverse(strRev.begin(),strRev.end()); ans+=(str==strRev); } printf("%d\n",ans); } *問64 Secret Number http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0064 STLのアルゴリズムの勉強。 行き当たりばったりで勉強しているうえSTLのアルゴリズムには不慣れなのでたぶん玄人から見たら笑うレベルの使い方だとは思う。 精進しないとな。 我流でなくきちっとしたコードも書けるようになる勉強ってなんだろう? #include<stdio.h> #include<string> #include<iostream> #include<ctype.h> #include<algorithm> int string_sum(std::string& str, std::string& str2){ std::string::iterator it; int result=0; it = std::find_first_of(str.begin(), str.end(), str2.begin(), str2.end()); while(it != str.end()) { it = std::find_first_of(it, str.end(), str2.begin(), str2.end()); int add=0; while(it!=str.end() && isdigit(*it)){ add=add*10+((*it)-'0'); it++; } result+=add; } return result; } int main(){ std::string str; std::string v2="0123456789"; int ans=0; while(std::getline(std::cin,str)){ ans+=string_sum(str,v2); } std::cout<<ans<<"\n"; }
*問61 Rank Checker http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0061 整理番号とスコア。 スコアとランクを対応付けるだけです。 コードが冗長ですね、もうちょっと刈り取れそうです。 #include<stdio.h> const int MAX=31; const int TMAX=101; int main(){ int ranks[MAX]={0},scores[TMAX],no,score; while(1){ scanf("%d,",&no); scanf("%d",&score); if(no==0&&score==0)break; scores[no]=score; ranks[scores[no]]++; } int rank=0; for(int i=MAX-1;i>=0;i--){ if(ranks[i]>0)rank++; ranks[i]=rank; } while(scanf("%d",&no)!=EOF){ printf("%d\n",ranks[scores[no]]); } } *問62 What is the Bottommost? http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0062 逆パスカルの三角形風味の問題。 解法 定義通り計算するだけ。 1 1 1 1 2 1 、、、、 で一発で求める式もあるけれどめんどくさいですね。 #include<stdio.h> int main(){ char text[11]; while(scanf("%s",text)!=EOF){ for(int i=9;i>=1;i--){ for(int j=0;j<i;j++){ text[j]=((text[j]-'0')+(text[j+1]-'0'))%10+'0'; } } printf("%c\n",text[0]); } } *問63 Palindrome http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0063 文字列が回文になってるか判定して数える問題。 簡単な問題なので書くこと特になし。 まあstlのアルゴリズムもぼちぼち使えるようにならないとな。 #include<stdio.h> #include<string> #include<algorithm> #include<iostream> int main(){ std::string str,strRev; int ans=0; while(std::cin>>str){ if(std::cin.eof())break; strRev=str; std::reverse(strRev.begin(),strRev.end()); ans+=(str==strRev); } printf("%d\n",ans); } *問64 Secret Number http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0064 STLのアルゴリズムの勉強。 行き当たりばったりで勉強しているうえSTLのアルゴリズムには不慣れなのでたぶん玄人から見たら笑うレベルの使い方だとは思う。 精進しないとな。 我流でなくきちっとしたコードも書けるようになる勉強ってなんだろう? #include<stdio.h> #include<string> #include<iostream> #include<ctype.h> #include<algorithm> int string_sum(std::string& str, std::string& str2){ std::string::iterator it; int result=0; it = std::find_first_of(str.begin(), str.end(), str2.begin(), str2.end()); while(it != str.end()) { it = std::find_first_of(it, str.end(), str2.begin(), str2.end()); int add=0; while(it!=str.end() && isdigit(*it)){ add=add*10+((*it)-'0'); it++; } result+=add; } return result; } int main(){ std::string str; std::string v2="0123456789"; int ans=0; while(std::getline(std::cin,str)){ ans+=string_sum(str,v2); } std::cout<<ans<<"\n"; } *問65 Trading http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0065 簡素な取引データから2か月連続で取引のあった会社と取引回数を出力する問題。 std::mapで集計するだけです。 #include<stdio.h> #include<map> #include<stdlib.h> int main(){ std::map<int,int> old,now; int no,day; char re[10]; while(scanf("%d,%d%[\n]",&no,&day,re)!=EOF){ if(old.find(no)==old.end())old[no]=0; old[no]++; if(re[1]=='\n')break; } while(scanf("%d,%d",&no,&day)!=EOF){ if(old.find(no)!=old.end()){ if(now.find(no)==now.end())now[no]=old[no]; now[no]++; } } for(std::map<int,int>::iterator it=now.begin();it!=now.end();it++){ printf("%d %d\n",(*it).first,(*it).second); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: