1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> using namespace std; int main() { int n, sum, max; while (cin >> n) { sum = 0; max = 0; for (int i = 1; i <= n; i++) { if (sum + i > n) break; sum += i; max++; } cout << max << endl; } return 0; } |
2018年10月21日 星期日
itsa [C_GD03-易]線段切割
itsa67 2線段切割
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> using namespace std; int main() { int n, sum, max; while (cin >> n) { sum = 0; max = 0; for (int i = 1; i <= n; i++) { if (sum + i > n) break; sum += i; max++; } cout << max << endl; } return 0; } |
2018年10月8日 星期一
C++魔方陣
魔方陣
成績: 20 / 倒扣: 0.1
魔方陣是大家所熟知的數學問題,其規則是方陣中每一行、每一列以及對角線三個數字的總和都要相等。
數字 1 填入第一列中間行的位置。
輸入說明:
第一列的數字 n 代表總共有 n 個題組
每個題組的第一列的數字 m 代表 m x m 的魔方陣, m >= 3,奇數。
第二列數字 r 代表第一列到第m列中的第 r 列,1<=r<=m。
第二列數字 c 代表第一行到第m行中的第 c 列行,1<=c<=m。
輸出說明:
每一題組輸出兩列數字,
第 r 列的 d1-d2+d3-d4+...+dm 的值和第 c 行 d1-d2+d3-d4+...+dm 的值。
範例:
輸入
1
3
2
3
輸出
5
1
數字 1 填入第一列中間行的位置。
輸入說明:
第一列的數字 n 代表總共有 n 個題組
每個題組的第一列的數字 m 代表 m x m 的魔方陣, m >= 3,奇數。
第二列數字 r 代表第一列到第m列中的第 r 列,1<=r<=m。
第二列數字 c 代表第一行到第m行中的第 c 列行,1<=c<=m。
輸出說明:
每一題組輸出兩列數字,
第 r 列的 d1-d2+d3-d4+...+dm 的值和第 c 行 d1-d2+d3-d4+...+dm 的值。
範例:
輸入
1
3
2
3
輸出
5
1
1.數字 1 填入第一列中間行的位置
2.以1為起點,往右上方延伸
3.超出列範圍的(<0),則填入該行最後列
4.超出行範圍的(>m),則填入該列第一行
5.遇到不為零或是超出列(<0)與行(>m),則填入目前的數下面一格
6.沒有上述狀況,則填入右上方格
3X3為
8 1 6
3 5 7
4 9 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include<iostream> using namespace std; int main() { int n, m, r, c, i, j, ti, tj, num, rsum, csum; int arr[100][100]; int f[2][2] = { {-1,1},{1,0} }; cin >> n; for (int k = 0; k < n; k++) { cin >> m; cin >> r; cin >> c; for (int a = 0; a < m; a++) for (int b = 0; b < m; b++) arr[a][b] = 0; i = 0; j = m / 2; num = 2; rsum = 0; csum = 0; arr[i][j] = 1; for (int a = 1; a < m*m; a++) { ti = i + f[0][0]; tj = j + f[0][1]; if ((ti < 0 && tj > m - 1) || (ti >= 0 && tj <= m - 1 && arr[ti][tj] != 0)) { arr[i + f[1][0]][j + f[1][1]] = num; i += f[1][0]; j += f[1][1]; } else if (ti < 0 && tj <= m - 1) { arr[m - 1][tj] = num; i = m - 1; j = tj; } else if (ti >= 0 && tj > m - 1) { arr[ti][0] = num; i = ti; j = 0; } else { arr[ti][tj] = num; i = ti; j = tj; } num++; } for (int b = 0; b < m; b++) { if (b % 2 == 0) { rsum += arr[r - 1][b]; csum += arr[b][c - 1]; } else { rsum -= arr[r - 1][b]; csum -= arr[b][c - 1]; } } cout << rsum << endl; cout << csum << endl; } return 0; } |
itsa [C_AR62-中]矩陣相乘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<iostream> using namespace std; int main() { int m, n, t; int a[100][100], b[100][100], c[100][100]; cin >> m >> n; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) cin >> a[i][j]; cin >> n >> t; for (int i = 0; i < n; i++) for (int j = 0; j < t; j++) cin >> b[i][j]; for (int i = 0; i < m; i++) { for (int j = 0; j < t; j++) { c[i][j] = 0; for (int k = 0; k < n; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; } } for (int i = 0; i < m; i++) { for (int j = 0; j < t; j++) { if (j > 0) cout << " "; cout << c[i][j]; } cout << endl; } return 0; } |
訂閱:
文章 (Atom)