列印一個n維矩陣,其列之間的距離為r。對于 n = 4 和 r = 7,這是如下所示的輸出,其中每列之間有 7 個空格。(不允許使用矩陣或陣列)

這里的主要問題是我試圖弄清楚如何根據n、r和來概括 1 的位置i。我陷入困境,因為似乎沒有簡單的方法可以做到這一點,或者我只是想念它。
這是解決此類問題的好方法還是有更好的方法?
#include <stdio.h>
int main() {
int n; // Dimensions
int r; // Distance between columns
printf("Enter n: ");
scanf("%i", &n); // Dimensions
printf("Enter the distance between columns in matrix: ");
scanf("%i", &r); // Distance
int i, j, k;
for (i = 0; i < n; i ) { // Row
for (j = 0; j < (r 1) * n; j ) {
if (j % r == 0) {
if (j == r * (1 i) && j != 0) { // For 1s
printf("1");
} else {
printf("0"); // For -0s
}
} else {
printf("X");
}
}
printf("\n");
}
return 0;
}
uj5u.com熱心網友回復:
請注意,printf格式說明符(如%i十進制整數輸出)可以采用可選的欄位寬度引數;因此,printf("%8i", x);當x的值為 時1,將列印 1(前七個空格,使總欄位寬度為 8)。此外,如果您指定 a*作為欄位寬度,則該寬度被指定為呼叫的額外引數(r 1在您的情況下為 value )printf,緊接在要列印的引數之前。
從cppreference:
- (可選)整數值或 * 指定最小欄位寬度。結果用空格字符填充(默認情況下),如果需要,右對齊時在左側,如果左對齊則在右側。在使用 * 的情況下,寬度由 type 的附加引數指定,該引數
int出現在要轉換的引數和提供精度的引數(如果提供)之前。如果引數的值為負,則結果為 - 指定的標志和正的欄位寬度。(注意:這是最小寬度:該值永遠不會被截斷。)
因此,對于您的問題,假設r第一列之前和列之間有空格,并假設您想要1每個前導對角線元素(當行 = 列時)和0所有其他元素,以下非常簡化的代碼可以解決問題:
#include <stdio.h>
int main(void)
{
int n; // Dimensions
int r; // Distance between columns
printf("Enter n: ");
scanf("%i", &n); // Dimensions
printf("Enter the distance between columns in matrix: ");
scanf("%i", &r); // Distance
for (int i = 0; i < n; i ) { // Row
for (int j = 0; j < n; j ) { // Column
int x = (j == i) ? 1 : 0;
printf("%*i", r 1, x); // Field width is #spaces PLUS 1 for the digit itself
}
printf("\n");
}
return 0;
}
uj5u.com熱心網友回復:
圖片不是很好。我假設第一列左對齊并且距離包括數字。
#include <stdio.h>
void printMatrix(int n, int d)
{
for(int row = 0; row < n; row )
{
for(int col = 0; col < n; col )
printf("%*d", !!col * d 1, row == col);
printf("\n");
}
}
int main(void) {
int n; // Dimensions
int r; // Distance between columns
printf("Enter n: ");
scanf("%i", &n); // Dimensions
printf("Enter the distance between columns in matrix: ");
scanf("%i", &r); // Distance
printf("\n");
printMatrix(n,r);
}
https://godbolt.org/z/KTcvTre1E
如果您不被允許使用那些“花哨”的格式:
#include <stdio.h>
void printMatrix(int n, int d)
{
for(int row = 0; row < n; row )
{
for(int col = 0; col < n; col )
{
printf("%d", row == col);
for(int space = 0; col != n && space < d; space )
printf(" ");
}
printf("\n");
}
}
int main(void) {
int n; // Dimensions
int r; // Distance between columns
printf("Enter n: ");
scanf("%i", &n); // Dimensions
printf("Enter the distance between columns in matrix: ");
scanf("%i", &r); // Distance
printf("\n");
printMatrix(n,r);
}
https://godbolt.org/z/Y5K8h74e5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/341604.html
