2013-05-14 41 views
8

Tôi đang học và cải thiện các kỹ năng lập trình của mình từ cuốn sách "Think Like a programmer" và tôi được yêu cầu hiển thị loại kim tự tháp này.C++: Hiển thị các ký tự

######## 
###### 
    #### 
    ## 

tôi đã làm nó với mã này

for(int i = 0; i < 4; i++){ 

    for(int k = 0; k < i; k++) 
     cout << ' '; 

    for(int j = 0; j < 8 - i * 2; j++) 
     cout << '#'; 

    cout << '\n'; 
} 

... Nhưng những câu hỏi là "Sử dụng quy tắc tương tự như các chương trình hình từ trước đó trong chương (chỉ hai đầu ra statements- một trong đó xuất kết quả băm và một kết quả đầu ra một dòng cuối cùng), viết một chương trình tạo ra hình dạng sau: "

Tôi không chắc chắn, nhưng nó có thể hiển thị một cái gì đó như thế này chỉ với 2 phát biểu và không sử dụng ký tự không gian?

chỉnh sửa.

Cảm ơn một người trả lời. Nhưng theo tác giả tôi nên làm điều này chỉ với cout << '#'cout << '\n'. Và đây là quan điểm của tôi, bởi vì dường như thao tác với một số phương pháp hoặc chức năng không phải là một lựa chọn.

Viết một chương trình mà chỉ sử dụng hai câu lệnh đầu ra, cout < < "#" và cout < < "\ n", để tạo ra một mô hình biểu tượng băm có hình dạng như một ... Of Course với việc sử dụng vòng lặp: P

+1

Bạn cần phải tìm cách tạo ra không gian một cách hoàn toàn. –

+1

Thậm chí có thể có một câu lệnh 'cout' đơn lẻ xuất ra dấu cách, băm và cuối dòng. ;) Nói cách khác: bạn chỉ cần vòng lặp ngoài của bạn ('i') và câu lệnh' cout' đơn lẻ này. – syam

+0

Nếu bạn bulid một chuỗi cho mỗi hàng, Bạn phải sử dụng chỉ một tuyên bố đầu ra – gkovacs90

Trả lời

5

Thật không may, câu trả lời cho câu hỏi này đơn giản hơn nhiều: lỗi tác giả. Một vài câu hỏi đầu tiên nên được diễn đạt để cho phép sử dụng một đầu ra không gian duy nhất (cout < < "";). Tôi không biết làm thế nào tất cả chúng ta bỏ lỡ điều này trong chỉnh sửa, và tôi xin lỗi vì sự nhầm lẫn này đã gây ra. Nói chung, bất kỳ bài tập nào có ý định ép người đọc đi "đào" sẽ rõ ràng vào thời điểm đó.

Nhân tiện, vấn đề này và các vấn đề khác từ ấn bản đầu tiên được thảo luận trong tài liệu có thể tìm thấy trên trang web của tôi here.Nếu bạn có thêm câu hỏi hoặc vấn đề với cuốn sách, vui lòng liên hệ với tôi.

+0

Cảm ơn, điều đó đã xóa hết mọi thứ, tuy nhiên, tôi vẫn bối rối khi tập 2.3 từ cùng một chương. Nó yêu cầu hiển thị một số loại vật thể giống như ngôi sao, nhưng một lần nữa, có thể với một cout Tôi chia vấn đề này thành hai phần - trên và dưới, thứ hai làm cho một thuật toán hiển thị 2 hàng có cùng giá trị (giữa sao) là không thể. – ashur

10
#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

int main() 
{ 
    for(int i = 0; i < 4; i++) { 
     cout << setw(8-i) << string(8-i*2, '#') << endl; 
    } 
    return 0; 
} 
0

Bạn có thể kiểm tra vị trí trong vòng lặp cho mỗi dòng. Điều này kết hợp với toán tử toán hạng 3 có thể giải quyết điều này với hai câu lệnh đầu ra.

for(int i = 0; i < 4; i++){ 

    for(int k = 0; k <= 8-i; k++) 
     cout << k<i ? ' ' : '#'; 

    cout << endl; 
} 

Ký tự dấu cách hàng đầu sẽ ở đó, bạn không thể tạo khoảng trống "trống" thay cho chúng.

+0

Cảm ơn, nhưng tôi không chắc Đây có phải là điều tôi muốn biết không. Tôi đã chỉnh sửa câu hỏi để xua tan sự nhầm lẫn. – ashur

0

Tôi không biết nếu đó là về "nghệ thuật" của việc không sử dụng cout << ' ', nhưng trong trường hợp đó có một giải pháp gọn gàng:

#include <iostream> 

int main() { 
    for (int i = 0; i < 4; ++i, std::cout << '\n') { 
     for (int j = 0; j < 8-i; ++j) { 
      std::cout << (char)('#' - 3*(j<i)); 
     } 
    } 
} 

Và, khác, thậm chí phiên bản mơ hồ hơn mà sử dụng ASCII đại diện hơn là viết ' ' một cách rõ ràng, chỉ sử dụng một cho vòng lặp:

int main() { 
    for (int i = 1; i < 37; ++i) { 
     std::cout << (char)(35-3*((i%9)<=((i-1)/9)) - 3*((i%9)>=(9-(i-1)/9)) \ 
      - 22*(!(i%9))); 
    } 
} 

tôi không nói điều này là thực hành lập trình tốt, nhưng có lẽ nó sẽ giúp người trong việc thực hiện - một lần nữa - rằng đó là cuối cùng thì tất cả các số và thanh ghi .

+0

Bạn cũng có thể sử dụng mã '' ''một cách rõ ràng. – unkulunkulu

+0

Nó hoàn toàn phụ thuộc vào tác giả của cuốn sách. Tác giả có thể muốn khuyến khích mọi người xem mã ASCII cơ bản. Ngoài ra, tôi không thể hình ảnh đó 'setw' ví dụ, không sử dụng' '' 'rõ ràng trong mã của nó một nơi nào đó xuống dòng. –

+0

Tôi có nghĩa là không thực hiện toán học trên ascii để lấy mã của '''', chỉ cần sử dụng mã đó trực tiếp! Nó không buồn cười vì lý do đó. Đó là quan điểm của tôi. – unkulunkulu

Các vấn đề liên quan