「AOJ再挑戦86~90」の編集履歴(バックアップ)一覧に戻る

AOJ再挑戦86~90 - (2014/02/04 (火) 19:59:49) のソース

*問86 Patrol
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0086
一筆書きの判定問題

解法
一筆書きの判定をそのまま。

 #include<stdio.h>
 int main(){
 	int a,b;
 	while(scanf("%d %d",&a,&b)!=EOF){
 		int c[255]={0};
 		c[a]++;
 		c[b]++;
 		while(scanf("%d %d",&a,&b)){
 			if(a==0&&b==0)break;
 			c[a]++;
 			c[b]++;
 		}
 		bool ok=(c[1]%2)&(c[2]%2);
 		for(int i=3;i<101;i++){
  			if(c[i]%2==1)ok=false;
 		}
 		printf("%s\n",ok?"OK":"NG");
 }



*問87 Strange Mathematical Expression
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0087
逆ポーランド記法で表記された式を計算する問題

解法
スタック使った実装ゲーム。

 #include<stdio.h>
 #include<stack>
 #include <ctype.h>
 #include <stdlib.h>
  
 int main(){
 	
 	while(1){
 		char siki[10],c;
  		double a,b;
 		std::stack<double> nums;
 		while(scanf("%s%c",siki,&c)!=EOF){
 			if(isdigit(siki[0])||siki[1]!='\0'){
 				nums.push(atof(siki));
 			}else{
 				b=nums.top(),nums.pop();
 				a=nums.top(),nums.pop();
 				switch(siki[0]){
 					case '+': nums.push(a+b); break;
 					case '-': nums.push(a-b); break;
  					case '*': nums.push(a*b); break;
					case '/': nums.push(a/b); break;
 				}
 			}
  			if(c=='\n')break;
 		}
 		printf("%lf\n",nums.top());
 		if(scanf("[\n]",&c)==EOF)break;
 	}
 }




*問88 The Code A Doctor Loved
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0088
解法
対応表を作るくらいしか思いつかないです。
列を文字列指定してExcelのA列に表をコピペして
 =CONCATENATE("ctos","['",A1,"']=""",,B1,"""")
と、あとは\が必要な文字だけ修正すれば対応表を作る時間がかかりません。
それくらいですね。
あとは2つ目の表はAからZまではビットがきれいに並んでるので自動生成するだけです。
長いのでカット。