PAT乙級C/C++簡単シミュレーション問題
38047 ワード
PAT乙級C/C++簡単シミュレーション問題人を殺しても命を償わない(3 n+1)予想 掘削機の技術はどこが強いか X探し オバマとプログラミングを学ぶ 日付差 D進数のA+B 回文列 反論 説明:簡単なシミュレーション問題は「テーマがどう言えば、あなたはどうすればいいか」のテーマで、基本コード能力を考察します.
人を殺して命を償わない(3 n+1)推測題名説明:カラズは、いずれの自然数nに対しても偶数であれば半分を切ると推測した.奇数であれば(3 n+1)を半分切り、最後のステップまでn=1を得る.1000を超えない正の整数nを与えるには、n=1を得るにはどのくらいのステップが必要ですか? コードコードコードコード:
掘削機の技術はどの家が強いですタイトル説明:掘削機技能大会では、1行目に100000を超えない正の整数N、すなわち参加者数を入力し、その後のN行は、その代表する学校番号(1から連続番号)とその総点、中間スペースで区切られた参加者の情報と成績を与える. コードコードコードコード:
Xを探す題名説明:正の整数n(1=
コードコードコードコード:
オバマと一緒にプログラミングを習う題名説明:オバマ氏は、正方形の辺長Nと充填文字Cを1行に1つのスペース間隔で設定し、出力行数は列数の半分であるコンピュータプログラムを作成した. コードコードコードコード:
日付差題名説明:2つの日付があり、2つの日付の間の日数を求め、2つの日付が連続している場合、それらの間の日数を2日間とする.各グループのデータには2行の入力があります. コードコードコードコード:
D進のA+B題名説明:非負の10進数AとB及びD進数を2つ入力し、A+BのD進数を出力する. コードコードコードコード:
回文列題名説明:一連の文字を読み込んで、回文列かどうかを判断する.「回文列」は正読みも反読みも同じ文字列であり、軸対称ともいえる.255を超えない文字列は、エコー列出力YESであり、そうでなければNOを出力する.
反対のことを言う題名記述:1つの英語文字列を与え、すべての単語を逆順に出力する. コードコードコードコード:
人を殺して命を償わない(3 n+1)推測
#include <stdio.h>
int main()
{
int n,count;
scanf("%d",&n);
while(n!= 1)
{
if(n%2 == 0) n = n/2;
else n = (3*n+1)/2;
count++;
}
printf("%d
",count);
return 0;
}
掘削機の技術はどの家が強いです
#include <stdio.h>
const int maxN = 100000;
int school[maxN] = {0};
int main()
{
int N,schoolID,score;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d %d",&schoolID,&score);
school[schoolID] += score;
}
int MAX,k = 0;
for(int i=1;i<=N;i++)
{
if(school[i]>MAX)
{
MAX = school[i];
k = i;
}
}
printf("%d %d",k,MAX);
return 0;
}
Xを探す
#include <stdio.h>
const int maxn = 200;
int main()
{
int n;
int a[maxn] = {0};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int x,index;
scanf("%d",&x);
for(int k=0;k<n;k++)
{
if(a[k] == x)
{
index = k;
}
}
printf("%d
",index);
return 0;
}
オバマと一緒にプログラミングを習う
#include <stdio.h>
int main()
{
int row,col;
char C;
scanf("%d %c",&col,&C);
if(col%2 == 1) row = col / 2 + 1;
else row = col /2;
for(int i=0;i<col;i++)
{
printf("%c",C);
}
printf("
");
for(int k=2;k<row;k++)
{
printf("%c",C);
for(int j=0;j<col-2;j++)
{
printf(" ");
}
printf("%c
",C);
}
for(int i=0;i<col;i++)
{
printf("%c",C);
}
return 0;
}
日付差
#include <stdio.h>
int month[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
bool isLeap(int year)
{
return((year % 4 == 0&&year % 100 != 0)||(year%400 ==0));
}
int main()
{
int time1,y1,m1,d1;
int time2,y2,m2,d2;
while(scanf("%d%d",&time1,&time2)!= EOF)
{
if(time1 > time2)
{
int temp = time1;
time2 = time1;
time1 = temp;
}
y1 = time1 / 10000,m1 = time1 % 10000 / 100,d1 = time1 % 100;
y2 = time2 / 10000,m2 = time2 % 10000 / 100,d2 = time2 % 100;
int ans = 1;
while(y1<y2||m1<m2||d1<d2)
{
d1++;
if(d1 == month[m1][isLeap(y1)]+1)
{
m1++;
d1 = 1;
}
if(m1 == 13)
{
y1++;
m1 = 1;
}
ans++;
}
printf("%d
",ans);
}
return 0;
}
D進のA+B
#include <stdio.h>
int main()
{
int a,b,d;
scanf("%d%d%d",&a,&b,&d);
int sum = a + b;
int ans[31],num = 0;
do{
ans[num++] = sum % d;
sum /= d;
}while(sum!=0);
for(int i = num-1;i>=0;i--)
{
printf("%d",ans[i]);
}
return 0;
}
回文列
#include <cstdio>
#include<cstring>
const int maxn = 255;
bool judge(char str[])
{
int len = strlen(str);
for(int i=0;i<len/2;i++)
{
if(str[i] != str[len - i -1])
{
return false;
}
}
return true;
}
int main()
{
char str[maxn];
while(gets(str))
{
bool flag = judge(str);
if(flag == true)
{
printf("YES
");
}
else
{
printf("NO
");
}
}
return 0;
}
反対のことを言う
#include <cstdio>
#include<cstring>
int main()
{
char str[90];
gets(str);
int len = strlen(str),r=0,h=0;
char ans[90][90];
for(int i=0;i<len;i++)
{
if(str[i]!=' ')
{
ans[r][h++] = str[i];
}
else
{
ans[r][h] = '\0';
r++;
h = 0;
}
}
for(int i=r;i>=0;i--)
{
printf("%s",ans[i]);
if(i>0) printf(" ");
}
return 0;
}