หน้าเว็บ

วันเสาร์ที่ 29 ตุลาคม พ.ศ. 2554

พีระมิดตัวเลข ด้วยภาษา C

        ผมนั่งเล่นอยู่ดีๆ  เพื่อนก็เอาโจทย์ภาษา C  มาให้ทำแก้เครียดครับ
เขาเขียนโปรแกรมให้แสดงตัวเลขเป็นรูปพีระมิด  ในลักษณะนี้

1
1 2 3
1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 9

        อันนี้คือ พีระมิต 5 ชั้นครับ  โดยให้ผู้ใช้กรอกจำนวนชั้นที่ต้องการลงไป  แล้วโปรแกรมก็จะทำการแสดงผลพีระมิดออกมา 5 ชั้น

คงจะมีคนคิดว่าปัญหาง่ายๆแค่นี้ใครๆก็แก้ได้  ไม่เห็นจะยากเลย  วนลูป 2 - 3 ลูปก็ได้แล้ว
ใช่ครับ  มันก็จริงอย่างที่คุณคิด 
แต่ผมอยากให้คุณเขียนมันออกมาโดยใช้ลูปแค่ลูปเดียว  จะเป็น for, while, หรือ do while ก็ได้ 

ซึ่งมันก็ทำให้ต้องใช้เวลาในการคิดขึ้นมาอีกนิดหน่อย
ตอนแรกที่เพื่อนให้โจทย์ผมมา  ก็เกือบจะได้แล้วครับ  ไม่รู้มันติดอะไรเหมือนกัน  ฮ่าๆๆๆๆ
พอกลับไปอาบน้ำ    อาบน้ำอยู่ดีๆ  ดันแก้โจทย์ได้ซ่ะงั้น   มาดูโค๊ดผมกันครับ
#include<iostream.h>
#include<conio.h>

void main(){
    clrscr();

    int num_rows=5;//number of rows
    int num_cols=2*num_rows-1; //compute number of columns = 2n-1
    int count_cols=1;
    int count_rows=1;
    int run=1;
 
    do{
        //----------------check show result-------------------------
        if((count_cols < (num_rows-count_rows+1)) || (count_cols > (num_rows+count_rows-1)) ){
            cout<<"   ";
        } else {
            cout<<run<<"  ";
            run++;
        }
        //-----------------check new line---------------------------
        if(count_cols == num_cols){
            cout<<"\n";
            run=1;
            count_cols=0;
            count_rows++;
        }
        count_cols++;

    }while( (count_rows<=num_rows) && (count_cols<=num_cols) );

    getch();
}
อันนี้เขียนใน turbo c/c++ 3.0 ครับ   ผลลัพธ์ก็เป็นตามที่กล่าวมาแล้วเป๊ะเลย

1
1 2 3
1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 9

ลองดูครับใครที่เขียนได้สั้นกว่านี้  ดีกว่านี้  ลองเอามาแชร์ความรู้กันดูน่ะครับ

3 ความคิดเห็น: