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を得るにはどのくらいのステップが必要ですか?
  • コードコードコードコード:
  • #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; }

    掘削機の技術はどの家が強いです
  • タイトル説明:掘削機技能大会では、1行目に100000を超えない正の整数N、すなわち参加者数を入力し、その後のN行は、その代表する学校番号(1から連続番号)とその総点、中間スペースで区切られた参加者の情報と成績を与える.
  • コードコードコードコード:
  • #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を探す
  • 題名説明:正の整数n(1=
  • コードコードコードコード:
  • #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; }

    オバマと一緒にプログラミングを習う
  • 題名説明:オバマ氏は、正方形の辺長Nと充填文字Cを1行に1つのスペース間隔で設定し、出力行数は列数の半分であるコンピュータプログラムを作成した.
  • コードコードコードコード:
  • #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; }

    日付差
  • 題名説明:2つの日付があり、2つの日付の間の日数を求め、2つの日付が連続している場合、それらの間の日数を2日間とする.各グループのデータには2行の入力があります.
  • コードコードコードコード:
  • #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
  • 題名説明:非負の10進数AとB及びD進数を2つ入力し、A+BのD進数を出力する.
  • コードコードコードコード:
  • #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;
    }
    

    回文列
  • 題名説明:一連の文字を読み込んで、回文列かどうかを判断する.「回文列」は正読みも反読みも同じ文字列であり、軸対称ともいえる.255を超えない文字列は、エコー列出力YESであり、そうでなければNOを出力する.
  • #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; }

    反対のことを言う
  • 題名記述:1つの英語文字列を与え、すべての単語を逆順に出力する.
  • コードコードコードコード:
  • #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;	
    }