問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


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);
	}
}

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年01月30日 09:36