1. 程式人生 > >#pta 實驗

#pta 實驗

輸入 log 提示 strong 數組 ring mil 限定 body

一,pta實驗作業 (函數C

711題目一:

以上是新浪微博中一奇葩貼:“我出生於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個數字都不相同

”是指不同的數字正好是n個。如“2013”被視為滿足“4位數字都不同”的條件,但不被視為滿足2位或3位數字不同的條件。

  1. 本題pta提交列表:

    技術分享圖片

  1. 設計思路(流程圖)

技術分享圖片

最後流程如下:

#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. 此實驗所涉及的主要內容分以及我學到的東西

(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 實驗