※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

競技プログラムになれるための例題問題集らしい。
中学生くらいから対象?
会津大学オンラインジャッジIntroduction to Programming I 解答例。

Getting Started - X Cubic

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_B
xが一つ与えられるのでx^3を返せ。

#include<stdio.h>
int main(){
   int x;
   scanf("%d",&x);
   printf("%d\n",x*x*x);
    return 0;
}

Getting Started - Rectangle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_C
縦Acm 横Bcmの長方形の周長と面積を求める問題。

#include<stdio.h>
int main(){
 	int a,b;
	scanf("%d %d",&a,&b);
	printf("%d %d\n",a*b,2*a+2*b);
}


Branch on Condition - Small, Large, or Equal

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_2_A
整数a bの大小関係をこたえる問題。

#include<stdio.h> 
int main(){
 	int a,b;
	scanf("%d %d",&a,&b);
	printf("a %s b\n",a<b?"<":a>b?">":"==");
}



Branch on Condition - Range

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_2_B
3つの数a,b,cがa<b<cを満たすならYesと返す問題。

#include<stdio.h>
int main(){
 	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	printf("%s\n",a<b && b<c ? "Yes":"No");
}


Branch on Condition - Sorting Three Numbers


#include<stdio.h>
int main(){
 	int a,b,c,t;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b)t=a,a=b,b=t;
	if(b>c)t=b,b=c,c=t;
	if(a>b)t=a,a=b,b=t;
	printf("%d %d %d\n",a,b,c);
}


Repetitive Processing - Print Many Hello World

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_A
1000個のHello Worldを出力する問題。

#include<stdio.h>
int main(){
	for(int i=0;i<1000;i++){
		printf("Hello World\n");
	}
}


Repetitive Processing - Print Test Cases

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_B
複数入力ある問題に慣れるための練習問題。

#include<stdio.h>
int main(){
	int i=1,n;
 	while(scanf("%d",&n)!=EOF){
		if(n==0)break;
		printf("Case %d: %d\n",i++,n);
	}
}


Repetitive Processing - Swapping Two Numbers

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_C
連続して2数の組が与えられるので2数を一行ずつ小さいほうを右に大きいほうを左に配置して出力せよ。

#include<stdio.h>
int main(){
 	int a,b,t;
	while(scanf("%d %d",&a,&b)!=EOF){
		if(a==0&&b==0)break;
		if(a>b)t=a,a=b,b=t;
		printf("%d %d\n",a,b);
	}
}



Computation - A / B Problem

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_A
2数a,bが与えられるのでa//b a%b a/bをこたえよという問題。


#include<stdio.h>
int main(){
 	int a,b;
	scanf("%d %d",&a,&b);
	printf("%d %d %lf\n",a/b,a%b,(double)a/b);
}



Computation - Circle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_B
半径rの円の面積と円周を答えよ。

#include<stdio.h>
#include<math.h>
int main(){
	double r;
	scanf("%lf",&r);
	printf("%lf %lf\n",r*r*M_PI,2*r*M_PI);
}



Computation - Simple Calculator

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_C
単純な四則演算を処理する問題。

#include<stdio.h>
int main(){
	int a,b,c;
 	char op;
	while(scanf("%d %c %d",&a,&op,&b)!=EOF){
		if(op=='?')break;
		if(op=='+')c=a+b;
		if(op=='-')c=a-b;
		if(op=='*')c=a*b;
 		if(op=='/')c=a/b;
		printf("%d\n",c);
	}
}


Nested Controls I - Print a Rectangle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_5_A
指定されたサイズの長方形を出力する問題。

#include<stdio.h>
int main(){
	int a,b;
	while(scanf("%d %d",&a,&b)!=EOF){
		if(a==0&&b==0)break;
		for(int i=0;i<a;i++){
			for(int j=0;j<b;j++){
				printf("#");
 			}
			printf("\n");
		}
		printf("\n");
	}
}


Nested Controls I - Print a Rectangle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_5_A
枠付き長方形を出力する問題。

#include<stdio.h>
int main(){
	int a,b;
	while(scanf("%d %d",&a,&b)!=EOF){
 		if(a==0&&b==0)break;
		for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
 				printf("%s",i==1 || i==a || j==1 || j==b?"#":".");
			}
			printf("\n");
		}
		printf("\n");
	}
}



Nested Controls I - Print a Chessboard


#include<stdio.h>
int main(){
	int a,b;
 	while(scanf("%d %d",&a,&b)!=EOF){
		if(a==0&&b==0)break;
		for(int i=0;i<a;i++){
			for(int j=0;j<b;j++){
				printf("%s",(i+j)%2?".":"#");
			}
			printf("\n");
		}
		printf("\n");
	}
}


Nested Controls I - Print a Rectangle


#include<stdio.h>
int main(){
	int n,a[101],i;
 	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",&a[i]);
	for(i--;i>0;i--)printf("%d ",a[i]);
	printf("%d\n",a[0]);
}



Array - Finding Missing Cards

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_6_B
足りないカードを出力する問題。

#include<stdio.h>
#include<string.h>

int main(){
	int cards[4][14],n,t,num;
	char c,ws[5]="SHCD";
	memset(cards,0,sizeof(cards));
	scanf("%d",&n);
 	while(n--){
	scanf("%*c%c",&c);
 		scanf("%d",&num);
		if(c=='S')t=0;
		if(c=='H')t=1;
		if(c=='C')t=2;
		if(c=='D')t=3;
 		cards[t][num]=1;
	}
 	for(int i=0;i<4;i++){
		for(int j=1;j<=13;j++)if(cards[i][j]==0)printf("%c %d\n",ws[i],j);
	}
}







Array - Official House

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_6_C
大学の公舎4棟の出入りを管理する問題。

#include<stdio.h>
#include<string.h>
int main(){
	int count[4][3][10],n,b,f,r,v;
	memset(count,0,sizeof(count));
 	scanf("%d",&n);
	while(n--){
		scanf("%d %d %d %d",&b,&f,&r,&v);
		count[b-1][f-1][r-1]+=v;
	}
	for(int i=0;i<4;i++){
		for(int j=0;j<3;j++){
 			for(int k=0;k<9;k++)printf(" %d",count[i][j][k]);
			printf(" %d\n",count[i][j][9]);
		}
		if(i!=3)printf("####################\n");
	}
}




Nested Controls II - Grading

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_A
大学の試験結果の振り分けをする問題。
とりあえずショートコードで遊んでみたけれど一位の壁は厚い。


#include<stdio.h>

int main(){
	int m,f,r,s,c;
	while(scanf("%d%d%d",&m,&f,&r)){
 		if((m&f&r)==-1)break;
		s=m+f;
		c=4-(29<s)-(49<s)-(64<s)-(79<s);
 		c-=(c==3&&49<r);
		if((m|f)==-1||s<30)c=5;
		printf("%c\n",c+'A');
	}
}




Nested Controls II - How many ways?

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_B
1からnまでの数を重複なく3個足してsを作るとき何通りの方法があるか答える問題。


#include<stdio.h>
int main(){
	int n,s;
	while(scanf("%d %d",&n,&s)!=EOF){
		if(n==0&&s==0)break;
		int ans=0;
 		for(int a=1;a<n && 3*a<=s;a++){
			for(int b=a+1; b<n && a+2*b<=s;b++){
				int c=s-a-b;
				if(c<=b)break;
				if(n<c)continue;
 				ans++;
			}
		}
		printf("%d\n",ans);
	}
}





Nested Controls II - Spreadsheet

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_C
表計算ソフトの足し算機能を題材にした問題。

#include<stdio.h>
#include<vector>
int main(){
 	int r,c,n;
	std::vector<int> colSum;
	scanf("%d %d",&r,&c);
	for(int i=0;i<c;i++)colSum.push_back(0);
	while(r--){
		int rowSum=0;
		for(int j=0;j<c;j++){
 			scanf("%d",&n);
			printf("%d ",n);
			rowSum+=n;
			colSum[j]+=n;
		}
		printf("%d\n",rowSum);
	}
	int rowSum=0;
	for(int j=0;j<c;j++){
		printf("%d ",colSum[j]);
		rowSum+=colSum[j];
	}
	printf("%d\n",rowSum);
}


Character - Toggling Cases

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_A
英小文字を大文字に大文字を小文字に変えて出力する問題。

#include<stdio.h>
#include<ctype.h>

int main(){
	char c;
	while(scanf("%c",&c)!=EOF){
		if(islower(c)){
			c=toupper(c);
		}else if(isupper(c)){
			c=tolower(c);
		}
		printf("%c",c);
	}
}



Character - Sum of Numbers

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B
1000桁までの数字の各桁の和をこたえる問題。


#include<stdio.h>
#include<string.h>
int main(){
	char nums[1001];
	while(scanf("%s",nums)!=EOF){
 		if(nums[0]=='0'&&nums[1]=='\0')break;
		int ans=0;
		for(int i=0;nums[i]!='\0';i++)ans+=(nums[i]-'0');
		printf("%d\n",ans);
	}
}


Character - Counting Characters

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C
英語文章のアルファベット文字出現回数をこたえる問題。

#include<stdio.h>
#include<ctype.h>
int main(){
	int count[27]={0};
	char c;
	while(scanf("%c",&c)!=EOF){
 		c=tolower(c);
		if(islower(c))count[c-'a']++;
	}
	for(char i=0;i<26;i++)printf("%c : %d\n",i+'a',count[(int)i]);
}


String - Finding a Word

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A
文章中の単語出現回数を数える問題。
大文字小文字を区別しないに注意。

#include<iostream>
#include<string>
#include<ctype.h>

int main(){
	int ans=0;
 	std::string str,word;
	std::cin>>word;
	for(int i=0;i<word.size();i++)word[i]=tolower(word[i]);
	
	while(1){
		std::cin>>str;
		if(str=="END_OF_TEXT")break;
		for(int i=0;i<str.size();i++)str[i]=tolower(str[i]);
		if(word==str)ans++;
	}
	std::cout<<ans<<"\n";
}



String - Shuffle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_B
文字列のシャッフルを題材にした問題

#include<iostream>
#include<string>
int main(){
	std::string str,strL,strR;
	int n,s;
	while(1){
		std::cin>>str;
 		if(str=="-")break;
		std::cin>>n;
		while(n--){
			std::cin>>s;
			strL=str.substr(0,s);
 			strR=str.substr(s);
			str=strR+strL;
		}
		std::cout<<str<<"\n";
	}
}





String - Card Game

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_C
単純なカードゲームのスコアを計算する問題。

#include<iostream>
#include<string>
int main(){
	std::string strT,strH;
	int scoreT=0,scoreH=0,n;
	std::cin>>n;
	while(n--){
 		std::cin>>strT>>strH;
		int v=strT.compare(strH);
		if(v==0){
			scoreT+=1;
			scoreH+=1;
 		}else if(v<0){
			scoreH+=3;
		}else{
			scoreT+=3;
		}
	}
	std::cout<<scoreT<<" "<<scoreH<<"\n";
}






Math - Distance


#include<stdio.h>
#include<math.h>
int main(){
 	double x1,y1,x2,y2,dx,dy;
	scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
	printf("%lf\n",hypot(x2-x1,y2-y1));
}



Math - Triangle

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_B
3角形の2辺の長さとなす角度から面積と周長と高さをこたえる問題。

#include<stdio.h>
#include<math.h>
int main(){
	double a,b,C,S,L,h;
 	scanf("%lf %lf %lf",&a,&b,&C);
	C=C/180.0*M_PI;
	h=b*sin(C);
 	S=0.5*a*h;
	L=a+b+sqrt(a*a+b*b-2*a*b*cos(C));
	printf("%lf\n%lf\n%lf\n",S,L,h);
}


Math - Standard Deviation

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_C
標準偏差を求める問題。
問題で指定されている計算方法は誤差が大きくなるしnで割るのも変な話だがまあ指定されているからしかたないか。


#include<stdio.h>
#include<math.h>
int main(){
	while(1){
 		double xs[1001],m=0,v=0;
		int n;
		scanf("%d",&n);
		if(n==0)break;
 		for(int i=0;i<n;i++){
			scanf("%lf",&xs[i]);
			m+=xs[i];
		}
		m/=n;
		for(int i=0;i<n;i++){
 			v+=(xs[i]-m)*(xs[i]-m);
		}
		printf("%lf\n",sqrt(v/n));
	}
}