读入 1 个正整数 n(1≤n≤10), 再读入 n*n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。(副对角线为从矩阵的右上角至左下角的连线)
例:括号内是说明,可以不输入、不输出。
输入: 4 (n=4)
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
输出:sum=35
답:
#include<stdio.h>
int main()
{
int n;
int answer=0;
scanf_s("%d", &n);
int a[10][10] = { 0 };
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// 1 2 3 4 식으로 입력해도 배열에 들어가진다.
scanf_s("%d", &a[i][j]);
}
}
// 끝 열이랑 끝 행은 계산 안함으로 n-1 선언
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-1; j++) {
if (i == 0) {
answer += a[i][j];
}
else {
// 대각선 숫자도 계산에 포함이 안되기 때문에 if문으로 구분.
if (j != n - i-1) {
answer += a[i][j];
}
}
}
}
printf("%d",answer);
return 0;
}
要求使用二维数组求解下列问题。(提示:将加数、被加数、和放入一个二维数组中, 再输出该数组)。输入 1 个正整数 n(1≤n≤10),输出一张 20 以内的加法口诀表. 要求,该口诀表中的加数与被加数都不大于n, 分别存放在该表格中的第一行和第一列. 样式例如下:括号内是说明
输入:6 (n=6)
输出:
"+" 1 2 3 4 5 6
1 2
2 3 4
3 4 5 6
4 5 6 7 8
5 6 7 8 9 10
6 7 8 9 10 11 12
#include<stdio.h>
#include <math.h>
int main()
{
int n;
//문제에서 2차배열로 선언하라고 했기때문에 2차배열로 선언
int a[10][10];
scanf_s("%d", &n);
printf("+ ");
for (int i = 0; i < n; i++) {
printf("%d ", i + 1);
}
printf("\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
a[i][j] = (i + 1) + (j + 1);
}
}
for (int i = 0; i < n; i++) {
printf("%d ", i + 1);
for (int j = 0; j < i+1; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
编制程序,实现如下功能:
(1) 该程序首先从键盘输入整数矩阵a的行数m与列数n,根据输入的m与n,依次输入矩阵a的各元素值。假设1≤m,n≤20
(2) 能够计算矩阵a的魅力指数矩阵b,对于矩阵a的每一个元素 ,定义它的“魅力指数” ,即它的上、下、左、右四个邻居之和,如果某个位置不存在邻居,则该位置不参与求和计算。例如,输入的矩阵a如下图左边的矩阵所示,其对应的“魅力指数”矩阵如下图中间所示。
(3) 依据矩阵b 中对应的“魅力指数”大小,对矩阵a的所有元素进行排序。排序规则为,按“魅力指数”从左到右,从上到下的顺序降序排列,新得到的排序后的矩阵c如上图右侧矩阵所示。
(4) 依次输出上述三个矩阵的内容。
#include<stdio.h>
//퀵 정렬 사용해서 b매트릭스 정렬한다
void quickSort(int* arr, int start, int end) {
if (start >=end)return;//원소가 한개인 경우 취소
int pivot = start;//첫번째 원소
int left = start + 1;
int right = end;//끝 원소
while (left <= right) {
// 피벗보다 작은 데이터 찾을때까지 left증가
while(left <= end && arr[left] > arr[pivot])left++;
// 피벗보다 큰 데이터 찾을때까지 right감소
while(right > start && arr[right] < arr[pivot])right--;
// left가 right보다 크다면 피벗 위치 교환
if (left > right) {
int temp = 0;
temp = arr[pivot];
arr[pivot] = arr[right];
arr[right] = temp;
}
// 위 조건이 아니면 둘 위치 교환
else {
int temp = 0;
temp= arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
// 다시 분할해서 양쪽으로 실행 (재귀)
quickSort(arr, start, right - 1);
quickSort(arr, right+1, end);
}
int main()
{
int m, n,temp,k=0;
int a[20][20];
int b[20][20];
int c[20][20];
int arr1[400], arr2[400], arr3[400] = { 0 };
scanf_s("%d %d", &m, &n);
// a매트릭스 입력
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf_s("%d", &a[i][j]);
}
}
// b 매트릭스 생성 및 arr1 arr2 값 대입 초기화
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
temp = 0;
if (j + 1 < n)temp += a[i][j + 1];
if (j - 1 >= 0)temp += a[i][j - 1];
if (i + 1 < m)temp += a[i + 1][j];
if (i - 1 >= 0)temp += a[i - 1][j];
b[i][j] = temp;
arr1[k] = temp;
arr2[k] = temp;
k++;
}
}
// 퀵 정렬 실행
quickSort(arr1, 0, m*n-1);
int p,t;
// c 매트릭스 실행
for (int i = 0; i < m * n ; i++) {
for (int j = 0; j < m * n; j++) {
if (arr3[j] != 1 && arr1[i] == arr2[j]) {
arr3[j] = 1;
p = j % n;
t = j / n;
c[i / n][i % n] = a[t][p];
}
}
}
// a,b,c매트릭스 순차적으로 출력
printf("a=\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] < 10) {
printf("%d ", a[i][j]);
}
else {
printf("%d ", a[i][j]);
}
}
printf("\n");
}
printf("b=\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (b[i][j] < 10) {
printf("%d ", b[i][j]);
}
else {
printf("%d ", b[i][j]);
}
}
printf("\n");
}
printf("c=\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (c[i][j] < 10) {
printf("%d ", c[i][j]);
}
else {
printf("%d ", c[i][j]);
}
}
printf("\n");
}
return 0;
}