PAT乙級C/C++簡單模擬題


說明:簡單模擬題是“題目怎麼說,你就怎麼做”的題目,考察基本代碼能力。

害死人不償命的(3n+1)猜想

  • 題目描述:卡拉茲猜想,對於任何一個自然數n,如果是偶數,就砍掉一半;如果是奇數,就將(3n+1)砍掉一半,一直到最後一步得到n=1。給定一個不超過1000的正整數n,需要多少步才能得到n=1?
  • 代碼code:
#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\n",count);
	return 0;
}

挖掘機技術哪家強

  • 題目描述:挖掘機技能大賽,在第一行輸入一個不超過100000正整數N,即參賽人數,隨後的N行,每行給出參賽者的信息和成績,包括其代表的學校編號(從1開始連續編號)及其總分,中間空格分隔。
  • 代碼code:
#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=<n<=200),在輸入n個數值不同的數,在輸入一個X,輸出X在這個數列的下標。
  • 代碼code:
#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\n",index);
	return 0;
}

跟奧巴馬一起學編程

  • 題目描述:奧巴馬編寫了一個計算機程序,在一行中給定正方形邊長N 和填充字符C,間隔一個空格,輸出行數是列數的一半。
  • 代碼code:
#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("\n");
	for(int k=2;k<row;k++)
	{
		printf("%c",C);
		for(int j=0;j<col-2;j++)
		{
				printf(" ");
		}
		printf("%c\n",C);
	}
	for(int i=0;i<col;i++)
	{
		printf("%c",C);
	}
	return 0;
}

日期差值

  • 題目描述:有兩個日期,求兩個日期 之間的天數,如果兩個日期是連續的,則規定他們之間的天數爲兩天。每組數據有兩行輸入。
  • 代碼code:
#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\n",ans);
}
	return 0;
}

D進制的A+B

  • 題目描述:輸入兩個非負十進制整數A和B以及D進制數,輸出A+B的D進制數。
  • 代碼code:
#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\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;	
}

說反話

  • 題目描述:給定一句英語字符串,將所有單詞顛倒順序輸出。
  • 代碼code:
#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;	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章