INPUT
4 4
OUTPUT
ABCD
BCDA
CDBA
DCBA
Mình cần in ra được hình chữ nhật như trên, nhưng mình code thì mới chỉ ra được dòng đầu. những dòng sau chưa biết làm thế nào. Các bạn chỉ giúp mình với?
INPUT
4 4
OUTPUT
ABCD
BCDA
CDBA
DCBA
Mình cần in ra được hình chữ nhật như trên, nhưng mình code thì mới chỉ ra được dòng đầu. những dòng sau chưa biết làm thế nào. Các bạn chỉ giúp mình với?
Bạn đã tìm được quy luật từ ví dụ trên chưa?
Bạn đã thử nháp bằng giấy bút trước khi code chưa?
Bạn in ra dòng đầu như thế nào khi mà chưa hình dung ra được quy luật của các dòng?
Sai lầm của bạn là chưa hiểu rõ vấn đề mà đã đâm đầu vào code.
Bài này thật ra lại rất chi là đơn giản, thay vì đâm đầu vào code như @Sherly1001 đã nói thì chỉ cần suy nghĩ một chút cũng ra. Đây là một gợi ý dành cho bạn: Thử biểu diễn 4 dòng trên thành 4 hình vuông 2x2 như bên dưới và để ý tới vị trí các kí tự.
A B
D C
D A
C B
C D
B A
B C
A D
Mà khoan, cái gần cuối phải là CDAB chứ nhỉ, sao lại là CDBA ?
Ý bạn là:
ABCD
BCDA
CDAB
DABC
???
Các kí tự dịch phải (xoay vòng) 1 đơn vị sau mỗi dòng.
Mà khoan, nếu input là 4 5
thì dòng đầu tiên là ABCDE hay ABCDA, đề hơi thiếu dữ kiện thì phải ?
Quy luật mà mình tìm được (theo ví dụ) là:
5 x 5
A B C D E
B C D E A
C D E B A
D E C B A
E D C B A
4 x 5
A B C D E
B C D E A
C D E B A
D E C B A
4 x 7
A B C D E F G
B C D E F G A
C D E F G B A
D E F G C B A
…
Dài dòng và lắm trường hợp quá không viết nữa.
Mọi người nhìn theo tọa độ nhé. Chữ A đầu tiên của dòng đầu tiên em coi là mốc (0 ; 0)
Mọi người so sánh các điểm sau và để ý vị trí nhé. Mỗi trường hợp so sánh em ghi trên 1 dòng
giả sử input 4 , 7 (em coi 4 hàng 7 cột)
(1 ; 0) và (0 ; 1)
(2 ; 0 ) , (1 ; 1 ) , ( 0 ; 2)
(3 ; 0 ) , (2 ; 1 ) , ( 1 ; 0 ) , ( 0 ; 3 )
( 4 ; 0) , ( 3; 1 ) , .....( 1 ; 3) (đến đây là hết vì có 4 hàng thôi)
(5 ; 0) , ....
.... đếm tiếp đến 7 nhé.
Nhìn hết rồi hay mở thẻ này ra đọc nhé.
Thấy các điểm này giống nhau không ạ.
Tổng của x và y đều bằng 7 và cũng chứa 1 giá trị của(x , 0)
Tiếp nè
Nãy kết thúc ở ( 3 ; 4) giờ nhìn sang ( 7 ; 1) xong đến (6 ; 2) rồi đến (5 ; 3) thấy A B C đúng không nè. CÒn lại tự nhìn nha. Mỏi tay :confounded:
Lập ra cho vui thôi cứ chắc mọi người thấy quy luật rồi!
Em diễn giải hơi khó hiểu thì phải. Chắc không ai hiểu đâu. Viết tay thì được chứ code cho máy run chắc chết.
Nhìn theo đường chéo là thấy quy luật để viết tay. (Không chắc code được đâu)
Ai hiểu gì giải thích cho mọi người nữa nha. Em thấy sương sương thế. Hơi mất thời gian nhưng mọi người đã bị mất 2p lãng phí của cuộc đời. Cảm ơn mọi người.
Ai đọc không hiểu cũng không sao đâu vì em còn không biết em viết gì.
Lẽ ra reply topic nhưng nhầm sang anh Gà Coder (@HR16 ) mà giờ ko sửa được.
Chơi kiểu magic.
def sher(row, col):
def magic(i, j):
i %= col
if 0 == i: return j
if 0 == j: return i
if i + j < col: return i + j
else: return col - j - 1
for i in range(row):
for j in range(col):
print(chr(65 + magic(i, j)), end = '')
print()
sher(8, 6)
ABCDEF
BCDEFA
CDEFBA
DEFCBA
EFDCBA
FEDCBA
ABCDEF
BCDEFA
P/S: Cũng không hiểu Nguyên đang nói gì luôn. :V :V
Thôi kệ đi. Cái cách hiểu của em nó cứ lằng nhằng sao ấy( tự thấy nhiều lúc hơi hơi ngáo ). Hiểu theo quy luật của Sherly dễ hơn nhiều
import string
letters = list(string.ascii_uppercase)
colums = 9
rows = 5
count = 0
for i in range (1, rows+1):
for j in range(colums):
print(letters[j+count], end='')
count = count + 1
print('')
Output:
ABCDEFGHI
BCDEFGHIJ
CDEFGHIJK
DEFGHIJKL
EFGHIJKLM
[Finished in 0.4s]
Code này bị giới hạn bởi số lượng chữ cái alphabe (không tự quay lại A khi đã đến Z), nhưng vì đề bài không nói rõ nên chắc không sao
Cái output sai sai hay sao ấy ạ
À, bạn nói mình mới coi kỹ, sai quá sai, sorry làm sai đề bài, để lát có thời gian mình sửa lại
import string
letters = list(string.ascii_uppercase)
rows = 4
columns = 4
row = letters[:columns]
for i in range(1, rows+1):
print(''.join(row))
row.append(row.pop(row.index(row[0])))
ABCD
BCDA
CDAB
DABC
[Finished in 0.5s]
Theo logic mình hiểu thì mỗi lần xuống dòng thì ký tự đầu tiên sẽ được đem xuống cuối, và cứ xoay vòng như vậy, nhưng đề bài thì không theo logic này, nên cũng không chắc.
Do em cũng không biết giải thích kiểu gì nên viết code cho mọi người dễ hiểu. Đề bài của chủ thớt là đúng chứ không sai đâu ạ.
Code em code bằng C++ theo cách em lý giải bên trên ạ(đừng xem lại vì em còn không hiểu ):
#include <iostream>
#include <iomanip>
using namespace std;
void draw(int r , int c){
for(int i = 0; i < r ; i++){
for(int j = 0 ; j < c ;j++){
if(i + j < c) cout << setw(2) << (char) (65 + i + j) ;
else cout << setw(2) << (char) (65 + c - j - 1) ;
}
cout << endl;
}
}
int main(){
int r = 4 , c = 7 ;
draw(r , c);
return 0;
}
Kết quả đây ạ
Input : 4 7
Output :
A B C D E F G
B C D E F G A
C D E F G B A
D E F G C B A
Process returned 0 (0x0) execution time : 0.017 s
Mọi người xem và góp ý giúp em. Cảm ơn mọi người đã đọc.
P/s: Rộn ràng quá mà chưa thấy chủ thớt phản hồi gì
Chắc logic là thế này
1 2 3 4 5
2 3 4 5 1
3 4 5 2 1
4 5 3 2 1
5 4 3 2 1
Diễn đạt bằng số sẽ dễ nhìn hơn
Nguyên code v là ngon r, thêm xử lý trường hợp r > c
nữa là ok.
Còn nếu thích thì phá vòng for
bên trong với if else
thành 2 vòng for
luôn.
P/S: mình nói quy luật ở trên r mà hình như hông ai đọc.
Em có đọc và em đang thử code tiếp nè nhưng cái việc viết ngược CBA thay vì ABC thì em đang nghĩ tiếp. Code bằng đt nên chậm dã man🤦 đã thế complier còn bị ngáo nữa
Dùng phone thì mình recommend cái c4doird này nè.
Trc chưa có máy mình cũng code chay bằng cái này á.
Cái c4droid đấy là cái trả phí hay sao ấy. Em mới lớp 11 làm gì có tiền trả bản full còn cài bản crack thì hơi sao sao ấy. Cài nãy giờ tải cả complier về rồi mà vẫn báo không có complier. Kệ đi.
Code theo idea của @Sherly1001 đây nha. Giờ em mới được động vào máy tính (khổ thân tui học hành mà còn phải học trộm
)
Lưu ý đây là code của C++. Em mới học có C với C++ thôi nên bác nào cần thì dịch ra thuật toán rồi tự code nha.
Input c phải nhỏ hơn or bằng 26
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
void draw(int r , int c , string a){
for(int i = 0 ; i < r ; i++){
int pos = i % r;
for(int j = pos ; j < c ; j++)
cout << setw(3) << a.at(j);
for(int j = pos - 1 ; j >= 0 ; j--)
cout << setw(3) << a.at(j);
cout << endl;
}
}
int main(){
int r = 4 , c = 7;
string letters;
for(int i = 0 ; i < c ; i++){
letters.push_back((char) (65 + i ));
}
draw(r , c , letters);
return 0;
}
Input
4 7
Output
A B C D E F G
B C D E F G A
C D E F G B A
D E F G C B A
--------------------------------
Process exited after 0.03347 seconds with return value 0
Press any key to continue . . .
Mọi người xem và còn chỗ nào chưa được thì bảo để em sửa nha.
#include <iostream>
#include <iomanip>
using namespace std;
void draw(int r , int c){
for(int i = 0; i < r ; i++){
for(int j = 0 ; j < c ;j++){
int tmp = i % c;
if(tmp + j < c) cout << setw(2) << (char) (65 + tmp + j) ;
else cout << setw(2) << (char) (65 + c - j - 1) ;
}
cout << endl;
}
}
int main(){
int r = 7 , c = 4;
draw(r , c );
return 0;
}
Kết quả đây ạ:
Input
7 4
Output
A B C D
B C D A
C D B A
D C B A
A B C D
B C D A
C D B A
--------------------------------
Process exited after 0.03832 seconds with return value 0
Press any key to continue . . .
Cảm ơn mọi người đã đọc.