10000番台は競技プログラムの問題を初めて解く方のためのチュートリアル問題しかありません。
中学生プログラマでも解ける問題だけで構成されているのが特徴です。
10000 Hello World
#include<stdio.h>
int main(){
printf("Hello World\n");
}
10001 X Cubic
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
printf("%d\n",x*x*x);
}
10002 Rectangle
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d\n",a*b,2*a+2*b);
}
10003 Small, Large, or Equal
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("a %s b\n",a>b?">":a==b?"==":"<");
}
10004 Sorting Three Numbers
#include<stdio.h>
#include <algorithm>
int main(){
int a[3];
scanf("%d %d %d",&a[0],&a[1],&a[2]);
std::sort(a,a+3);
printf("%d %d %d\n",a[0],a[1],a[2]);
}
10005 Print Many Hello World
#include<stdio.h>
int main(){
int n=1000;
while(n--)printf("Hello World\n");
}
10006 Print Test Cases
#include<stdio.h>
int main(){
int n=1,p;
while(1){
scanf("%d",&p);
if(p==0)break;
printf("Case %d: %d\n",n++,p);
}
}
10007 Swapping Two Numbers
#include<stdio.h>
int main(){
int a,b,min,max;
while(1){
scanf("%d %d",&a,&b);
if(a==0&&b==0)break;
min=a>b?b:a;
max=a>b?a:b;
printf("%d %d\n",min,max);
}
}
10008 A / B Problem
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d %lf",a/b,a%b,(double)a/b);
}
10009 Circle
#include<stdio.h>
#include<math.h>
int main(){
double r;
scanf("%lf",&r);
printf("%lf %lf\n",r*r*M_PI,2.0*r*M_PI);
}
10010 Simple Calculator
#include<stdio.h>
int main(){
int a,b,c;
char s[2];
while(1){
scanf("%d %s %d",&a,s,&b);
switch(s[0]){
case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
case '/':
c=a/b;
}
if(s[0]=='?')break;
printf("%d\n",c);
}
}
10011 Reversing Numbers
#include<stdio.h>
int main(){
int n,i=0,as[101];
scanf("%d",&n);
for(;i<n;i++)scanf("%d",&as[i]);
i--;
for(;i>=0;i--)printf("%s%d",i==n-1?"":" ",as[i]);
printf("\n");
}
10012 Print a Rectangle
#include<stdio.h>
int main(){
int h,w;
while(1){
scanf("%d %d",&h,&w);
if(h+w==0)break;
while(h--){
for(int x=0;x<w;x++){
printf("#");
}
printf("\n");
}
printf("\n");
}
}
100013 Print a Frame
#include<stdio.h>
int main(){
int h,w;
while(1){
scanf("%d %d",&h,&w);
if(h+w==0)break;
for(int y=0;y<h;y++){
for(int x=0;x<w;x++){
printf("%s",y==0||y==h-1||x==0||x==w-1?"#":".");
}
printf("\n");
}
printf("\n");
}
}
10014 Print a Chessboard
#include<stdio.h>
int main(){
int h,w;
while(1){
scanf("%d %d",&h,&w);
if(h+w==0)break;
for(int y=0;y<h;y++){
for(int x=0;x<w;x++){
printf("%s",(y+x)%2==0?"#":".");
}
printf("\n");
}
printf("\n");
}
}
10015 Finding Missing Cards
#include<stdio.h>
#include<string.h>
int main(){
bool card[4][13];
memset(card,true,sizeof(card));
int n,no;
char t,s1[2];
scanf("%d",&n);
while(n--){
scanf("%s %d",s1,&no);
t=s1[0];
if(t=='S')t=0;
if(t=='H')t=1;
if(t=='C')t=2;
if(t=='D')t=3;
card[t][no-1]=false;
}
char tToN[]={'S','H','C','D'};
for(int i=0;i<4;i++){
t=tToN[i];
for(int j=0;j<13;j++){
if(card[i][j])printf("%c %d\n",t,j+1);
}
}
}
10016 Grading
#include<stdio.h>
int main(){
int m,t,r,s;
char re;
while(1){
scanf("%d %d %d",&m,&t,&r);
if(m==-1&&t==-1&&r==-1)break;
if(m==-1||t==-1){
re='F';
}else{
s=m+t;
if(s>=80){
re='A';
}else if(s>=65){
re='B';
}else if(s>=50){
re='C';
}else if(s>=30){
if(r>=50){
re='C';
}else{
re='D';
}
}else{
re='F';
}
}
printf("%c\n",re);
}
}
10017 How many ways?
この問題は普通に解けばn^2の計算量ですが1~nまでのすべての数を使えることを考えれば、計算量nに落とすことが出来ます。
#include<stdio.h>
#include <algorithm>
int main(){
int n,x,ans,d;
while(1){
scanf("%d %d",&n,&x);
if(n==0&&x==0)break;
ans=0;
for(int a=1;a<=n&&a<x-2;a++){
d=x-a;
d=std::min(std::min(a,d),n+1)-(d+2)/2;
if(d>0)ans+=d;
}
printf("%d\n",ans);
}
}
10018 Toggling Cases
#include<stdio.h>
int main(){
int t;
while(1){
t=getchar();
putchar(t+('A'<=t&&t<='Z')*32-('a'<=t&&t<='z')*32);
if(t=='\n')break;
}
}
10019 Sum of Numbers
各桁の数値を足していく問題。
ショートコードは苦手なのであまりコードが短くならない。
#include<stdio.h>
int main(){
int x,s;
while((x=getchar()-'0')!=0){
s=x;
while((x=getchar())!='\n'){
s+=x-'0';
}
printf("%d\n",s);
}
}
10020 Counting Characters
#include<stdio.h>
#include<string.h>
int main(){
int a[26];
char ch;
memset(a,0,sizeof(a));
while(scanf("%c",&ch)!=EOF){
if('a'<=ch&&ch<='z')a[ch-'a']++;
if('A'<=ch&&ch<='Z')a[ch-'A']++;
}
for(int i=0;i<26;i++)printf("%c : %d\n",i+'a',a[i]);
}
10021 Finding Minimum String
#include<stdio.h>
#include<string>
#include<iostream>
int main(){
std::string w,r;
int n;
std::cin>>n>>w;
while(--n){
std::cin>>r;
if(w>r)w=r;
}
std::cout<<w<<"\n";
}
10022 Finding a Word
解法
小文字を大文字にするのにSTLを使います。
今日から私もC++コーダからSTLコーダにジョブチェンジ。
ミニゲームくらいは作ったことあるけどきちんとしたプログラムを作ったことはないのでまだまだ私はコーダー。
#include<stdio.h>
#include<string>
#include<iostream>
#include<algorithm>
struct ToUpper {
char operator()(char c) { return std::toupper(c); }
};
int main(){
std::string word,text;
std::cin>>word;
std::transform(word.begin(),word.end(), word.begin(),ToUpper());
int ans=0;
while(1){
std::cin>>text;
if(text=="END_OF_TEXT")break;
std::transform(text.begin(), text.end(), text.begin(),ToUpper());
if(text==word)ans++;
}
std::cout<<ans<<"\n";
}
10023 Shuffle
解法
カードの山が100万枚とかになったら別のアルゴリズムが必要ですが、練習問題なのでそのまま実装します。
#include<stdio.h>
#include<iostream>
#include<string>
int main(){
std::string str;
int n,h;
while(1){
std::cin>>str;
if(str=="-")break;
std::cin>>n;
while(n--){
std::cin>>h;
str=str.substr(h)+str.substr(0,h);
}
std::cout<<str<<"\n";
}
}
10024 Distance
解法
math.hのhypot関数を使います。
#include<stdio.h>
#include<math.h>
int main(){
double x,y,x2,y2;
scanf("%lf %lf %lf %lf",&x,&y,&x2,&y2);
printf("%lf\n",hypot(x-x2,y-y2));
}
10025
三角形の2辺の長さとなす角が与えられるのでその三角形の面積、周長aを底辺とした時の高さを答えよ。
解法
三角形の公式から求めます
#include<stdio.h>
#include<math.h>
int main(){
double a,b,c,sin1,cos1;
scanf("%lf %lf %lf",&a,&b,&c);
c=c/180.0*M_PI;
sin1=sin(c);
cos1=cos(c);
c=sqrt(a*a+b*b-2*a*b*cos1);
printf("%lf\n%lf\n%lf\n",a*b*sin1*0.5,a+b+c,b*sin1);
}
10026 Standard Deviation
解法
提示された式をそのまま計算します。
#include<stdio.h>
#include<math.h>
void calc(int n){
double s[1001],ave=0,v=0;
for(int i=0;i<n;i++){
scanf("%lf",&s[i]);
ave+=s[i];
}
ave/=n;
for(int i=0;i<n;i++){
v+=(s[i]-ave)*(s[i]-ave);
}
printf("%lf\n",sqrt(v/n));
}
int main(){
int n;
while(1){
scanf("%d",&n);
if(n==0)break;
calc(n);
}
}
10027 Card Game
解法
std::stringで比較します。
ショートコードくらいしかやることがありませんが私はショートコードは苦手です。
#include<stdio.h>
#include<string>
#include<iostream>
int main(){
int n,a=0,b=0;
std::string t,h;
scanf("%d",&n);
while(n--){
std::cin>>t>>h;
t>h?a+=3:t<h?b+=3:a++&b++;
}
printf("%d %d\n",a,b);
}
10028 Sort I
解法
std::sortで一発です。
#include<stdio.h>
#include<algorithm>
int main(){
int n,a[1001];
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
std::sort(a,a+n);
for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]);
printf("\n");
}
10029 Sort II
解法
領域が足らないので配列を外に出すくらいです。
0.00をたたき出している人たちはすごいですね。
#include<stdio.h>
#include<algorithm>
int a[1000002];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
std::sort(a,a+n);
for(int i=0;i<n;i++)printf("%s%d",i==0?"":" ",a[i]);
printf("\n");
}
10030と10031 Search I
#include<stdio.h>
#include<set>
int main(){
std::set<int> nums;
int n,q,ans=0,num;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num);
nums.insert(num);
}
scanf("%d",&q);
for(int i=0;i<q;i++){
scanf("%d",&num);
ans+=(nums.find(num)!=nums.end());
}
printf("%d\n",ans);
}
10032 Stacking Blocks I
解法
std::stackを使うだけです。
#include<stdio.h>
#include<stack>
int main(){
std::stack<char> s;
char text[6],color[6];
while(1){
scanf("%s",text);
if(text[0]=='q')break;
if(text[1]=='o'){
printf("%c\n",s.top());
s.pop();
}
if(text[1]=='u'){
scanf("%s",color);
s.push(color[0]);
}
}
}
10033 Stacking Blocks II
#include<stdio.h>
#include<stack>
#include<string>
#include<iostream>
int main(){
std::stack<char> s[102];
std::string com,color;
char c,c2;
int no,no2;
while(1){
std::cin>>com;
if(com=="quit")break;
if(com=="push"){
std::cin>>no>>color;
s[no].push(color[0]);
}else if(com=="pop"){
std::cin>>no;
c=s[no].top();
s[no].pop();
std::cout<<c<<"\n";
}else if(com=="move"){
std::cin>>no>>no2;
c =s[no].top();
s[no].pop();
s[no2].push(c);
}
}
}
最終更新:2013年02月08日 21:32