PAT——乙級1036:跟奧巴馬一塊兒編程 &乙級1027:打印沙漏 (有坑)

乙級1036html

1036 跟奧巴馬一塊兒編程 (15 point(s))

美國總統奧巴馬不只呼籲全部人都學習編程,甚至以身做則編寫代碼,成爲美國曆史上首位編寫計算機代碼的總統。2014 年末,爲慶祝「計算機科學教育周」正式啓動,奧巴馬編寫了很簡單的計算機代碼:在屏幕上畫一個正方形。如今你也跟他一塊兒畫吧!算法

輸入格式:

輸入在一行中給出正方形邊長 N(3N20)和組成正方形邊的某種字符 C,間隔一個空格。編程

輸出格式:

輸出由給定字符 C 畫出的正方形。可是注意到行間距比列間距大,因此爲了讓結果看上去更像正方形,咱們輸出的行數其實是列數的 50%(四捨五入取整)。學習

輸入樣例:

10 a

輸出樣例:

aaaaaaaaaa
a        a
a        a
a        a
aaaaaaaaaa

這個就很簡單了spa

#include<cstdio>
#include<cmath>

int main(){
    int n;
    char a;
    scanf("%d %c",&n,&a);
    for(int i=0;i<round(float(n)/2.);i++){
        for(int j=0;j<n;j++){
            if(i==0||i==round(float(n)/2.)-1){
                printf("%c",a);
            }else{
                if(j==0||j==n-1){
                    printf("%c",a);
                }else{
                    printf(" ");
                }
            }
        }
        printf("\n");
    }
    return 0;    
} 

乙級1027code

1027 打印沙漏 (20 point(s))

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個「*」,要求按下列格式打印htm

*****
 ***
  *
 ***
*****

所謂「沙漏形狀」,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。blog

給定任意N個符號,不必定能正好組成一個沙漏。要求打印出的沙漏能用掉儘量多的符號。it

輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。io

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2

 

這道題簡直有毒。。。。我嚴重懷疑出題的嚴謹性。

我第一次提交代碼,是兩個Answer Wrong。我又修改了一下。。。這兩個成爲 Presentation Error格式錯誤了。。。我百思不得其解。

而後看算法筆記的解法。。。雖然跟個人不同。可是他輸出的時候

 

每一行直接換行了,而我是又輸出了幾個空格。跟最長的同樣長了才換行的。看着是如出一轍的。天知道這有個這麼大的坑呀。。。他的輸出格式裏又沒有規定。。。坑爹呀。

個人解法是先算出了上面倒三角形總共有幾行,再一行一行的輸出。比較麻煩。。。

#include<cstdio>
#include<cmath>
int main(){
    int N,n,temp,j;
    char c;
    scanf("%d %c",&N,&c);
    n=int(sqrt((N-1)/2.+1));
    if(n==0&&n>0) n=n-1;
    if(n==1) printf("%c\n",c);
    else{
        for(int i=0;i<n;i++){
            for(j=0;j<i;j++){
                printf(" ");
            }
            for(;j<2*n-1-i;j++){
                printf("%c",c);
            }
            printf("\n");
        }
        for(int i=n-2;i>=0;i--){
            for(j=0;j<i;j++){
                printf(" ");
            }
            for(;j<2*n-1-i;j++){
                printf("%c",c);
            }
            printf("\n");
        }    
    }
    if(n!=0) printf("%d\n",N-(n*n-1)*2-1);
    else printf("%d\n",n);
    
    return 0;
} 
相關文章
相關標籤/搜索