Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Bài toán khó: In tam giác số = 1 vòng lặp đơn

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Thumbs up Bài toán khó: In tam giác số = 1 vòng lặp đơn

    Thầy chủ nhiệm mình thách đố bài tập C++: Sử dụng một vòng lặp duy nhất (một biến chạy) in ra màn hình tam giác số:
    .......................1
    .....................2 3 2
    ..................3 4 5 4 3
    ................4 5 6 7 6 5 4
    ..............5 6 7 8 9 8 7 6 5
    ............6 7 8 9 0 1 0 9 8 7 6
    .........7 8 9 0 1 2 3 2 1 0 9 8 7
    ......8 9 0 1 2 3 4 5 4 3 2 1 0 9 8
    ...9 0 1 2 3 4 5 6 7 6 5 4 3 2 1 0 9
    0 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 0

    *Ghi chú: có thể dùng gotoxy() để in số tại tọa độ x, y.
    Cao thủ nào có ý tưởng nào không, cùng nhau làm bài toán này nhé.
    Đã được chỉnh sửa lần cuối bởi kid_boy : 07-10-2011 lúc 10:46 AM.

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    1 biến chạy hay một vòng lặp vậy bạn?

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Một vòng lặp duy nhất có một biến chạy duy nhất bạn à. Chính xác là for(int i=;i<;i++){...}. Không dùng continue.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Dòng 1 có 1 số, dòng 2 có 3 số, dòng 3 có 5 số ... Suy ra diện tích tam giác này ( số lượng các số có mặt trong tam giác ) là cấp số cộng bắt đầu bằng 1 và công sai là 2. Bạn dùng công thức tính cấp số cộng để tính ra được diện tích s từ độ cao h của tam giác. Bạn chuẩn bị trước 2 biến x và y khởi tạo = 0 để lưu tọa độ. Bạn cho vòng for i chạy từ 0 đến s. Nếu i thỏa điều kiện là phần tử của cấp số cộng, bạn tăng tọa độ y lên và gán tọa độ x về 0. Mọi chuyện còn lại thì bạn tính tam giác pascal như bình thường.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Mọi chuyện còn lại thì bạn tính tam giác pascal như bình thường.
    Đoạn tính này có cần thêm vòng for nào ko nhỉ.. Dùng 2 vòng lặp thì mình làm được rồi, nhưng mà chỉ được dùng một vòng lặp mà bạn. Mà tam giác này trông ko giống tam giác pascal
    lắm. Bạn có thể test cách của bạn xem có ra kết quả không nhé. Lớp minh vãn chưa làm được

  6. #6
    Ngày gia nhập
    09 2009
    Bài viết
    0

    Mặc định Bài toán khó: In tam giác số = 1 vòng lặp đơn

    Mình thấy bài này hay đấy. mình mới thử dùng một vòng lặp để in ra hình tam giác toàn chữ A. Còn in được tam giác số như đề bài thì mình nghĩ cần phải tìm đc công thức tổng quát của dãy 1 232 34543... Dãy này có qui luật j ko nhỉ?
    Code:
    #include "conio.h"
    #include "iostream.h"
    #include "math.h"
    void main()
    {
      for(int i=1;i<=100;i++)
      {
        if(sqrt(i-1)==(int)sqrt(i-1))   gotoxy(20-2*(ceil(sqrt(i))-1),wherey()+1);
        cout<<A<<" ";  
      }
      getch();
    }

  7. #7
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    EDIT:
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. #define y (i%(2*N))
    4. #define x (i/(2*N))
    5. void vetamgiac(int N, int i=0, char ch='\n'){
    6.     cout << ch;
    7.     if (i==2*N*N) return;
    8.     else if (y==(2*N-1)) vetamgiac(N, i+1, '\n');
    9.     else if (y+x+1 < N || y-x>=N) vetamgiac(N, i+1, ' ');
    10.     else vetamgiac(N, i+1, (2*x-abs(y-N+1)+1)%10 + '0');
    11. }
    12.  
    13. int main(){
    14.     vetamgiac(10); 
    15.     system("pause");
    16.     return 0;
    17. }
    Đã được chỉnh sửa lần cuối bởi vietduc : 08-10-2011 lúc 03:10 PM.

  8. #8
    Ngày gia nhập
    09 2009
    Bài viết
    0

    Hay vậy, vietduc dựa vào vị trí hàng cột để tính giá trị được in. Còn mình thì đâm đầu đi tìm công thức tổng quát của dãy đó..
    Code:
    #include "conio.h"
    #include "iostream.h"
    #include "math.h"
    #define x (ceil(sqrt(i))-1)
    #define y (i-x*x)
    void main()
    {
      for(int i=1;i<=100;i++)
      {
    	if(sqrt(i-1)==(int)sqrt(i-1))   gotoxy(20-2*(x),wherey()+1);
    	cout<<(int)(y+x-(y>x+1)*(2*(y-x-1))) %10<<" ";
      }
      getch();
    }
    vietduc viết dưới dạng đệ qui, mình xin chuyển thành vòng for cho đúng ý của đề bài
    Code:
    #include <iostream.h>
    #include <math.h>
    #include <conio.h>
    #define y (i%(2*10))
    #define x (i/(2*10))
    
    void main(){
    	char ch='\n';
    	for(int i=0;i<200;i++){
    		cout << ch;
    		if (y==(2*10-1)) ch='\n';
    		else if (y+x+1 < 10 || y-x>=10) ch=' ';
    		else ch=(2*x-abs(y-10+1)+1)%10 +'0';
    	}
    	getch();
    }

  9. #9
    Ngày gia nhập
    05 2010
    Bài viết
    0

    Mặc định quay tam giác số

    vậy để quay tam giác số này 90độ theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ thi tam giác mới sẽ như nào ,và code thực hiện như nào ai chỉ mình với đc ko

Các đề tài tương tự

  1. Kỹ thuật C++ Nhập và gán 1 kí tự trong vòng lặp sao cho khi không nhập kí tự thì vòng lặp lại chạy tiếp.
    Gửi bởi note194 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 12-08-2013, 09:11 PM
  2. Lập trình C++ giá trị của xâu trong vòng lặp và ngoài vòng lặp khác nhau
    Gửi bởi virus93ttll trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 14-05-2011, 02:43 PM
  3. Code cài đặt DSLK đơn vòng và kép vòng trên C++. Thêm 1 phần tử sau 1 phần tử trong DSLK đơn/kép
    Gửi bởi hoanghieu.fit.hcmus trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 09-04-2011, 02:54 PM
  4. Vòng lặp for lồng nhau, giúp tớ hiểu rõ hơn về vòng lặp for lồng nhau?
    Gửi bởi bk7million trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 29-04-2009, 07:46 PM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn