#pta 實驗
一,pta實驗作業 (函數C)
7—11題目一:
以上是新浪微博中一奇葩貼:“我出生於1988年,直到25歲才遇到4個數字都不相同的年份。”也就是說,直到2013年才達到“4個數字都不相同”的要求。本題請你根據要求,自動填充“我出生於y年,直到x歲才遇到n個數字都不相同的年份”這句話。
輸入格式:
輸入在一行中給出出生年份y和目標年份中不同數字的個數n,其中y在[1, 3000]之間,n可以是2、或3、或4。註意不足4位的年份要在前面補零,例如公元1年被認為是0001年,有2個不同的數字0和1。
輸出格式:
根據輸入,輸出x和能達到要求的年份。數字間以1個空格分隔,行首尾不得有多余空格。年份要按4位輸出。註意:所謂“n個數字都不相同
- 本題pta提交列表:
- 設計思路(流程圖)
最後流程如下:
#include<string.h>
int main()
{
int y,n,sum=0,x=0;
int a[10],b[20];
scanf("%d %d",&y,&n);
for(int j=y;j<=10000;j++)
{
a[0]=y/1000;
a[1]=y/100%10;
a[2]=y/10%10;
a[3]=y%10;
memset(b,0,sizeof(b));
for(int i=0;i<4;i++)
b[a[i]]++;
for(int i=0;i<10;i++)
{
if(b[i]>=1)
sum++;
}
if(sum==n)
break;
for(int i=0;i<10;i++)
b[i]=0;
y++;
x++;
sum=0;
}
printf("%d %04d",x,y);
return 0;
}
本題調試結果:
與樣例完全符合。
- 此實驗所涉及的主要內容分以及我學到的東西
(1)for 、if 語句的使用
(2)對數組進行初始化的方法
(3)輸出數字。若數字位數不夠在前方補零的方法
4.實驗過程中遇到的問題
整個實驗思路清晰的狀態下算是難度不大的。但是,設計好大概實驗,卻出現了一些小問題
(1)實驗過程中,剛開始我沒有對數組b初始化,然而 1988 4 的樣例輸出正確。1 2的樣例輸出結果為 1 0002.對其進行初始化,如果使用b[20]={0},如下圖,會有警告擴展初始化而且輸出結果與正確結果相差甚遠。
而使用memset(b,0,sizeof(b));卻解決了所有問題。將數組b 初始化進行清零。
(2)還有一個問題 ,我無法想明白。在題目中明確指出y的值在[1,3000]。我在程序設計中的for循環限定y的最大值為3000.然而題目提交之後pta 提示我最大邊界出現錯誤,如下圖。
而我把y的最大值設為10000,則結果正確。pta顯示完全正確。
在這裏想向小夥伴們求助一下。
#pta 實驗