# プログラミング基礎WS問題 ## 問題文(多重ループ・ポインタの問題) 実数型2次元配列$x[N][N]$(Nは定数)を正方行列と考える. 正方行列$x$を入力から読み取り,対角行列かどうか判定するプログラムを作成しなさい. $x$をポインタx_pointerで受け取り,この正方行列が対角行列であれば1を返し,そうでなければ0を返しなさい.なお,対角行列とは,正方行列で$Aij=0(i≠j)$の行列のことをいう. ## 制約 * 3<=N<=5 ## 入力 入力は以下の形式で標準入力から与えられる。 ``` abc cef ghi ``` ## 出力 問題文の指示に従って対角行列か判定し、対角ならば1、対角でないならば0を出力せよ ## 入力例1 ``` 200 030 004 ``` ## 出力例1 ``` 1 ``` ## 入力例2 ``` 500 020 021 ``` ## 出力例2 ``` 0 ``` ## 入力例3 ``` 800 090 003 ``` ## 出力例3 ``` 1 ``` ## 解説 ### 手順 1. 最初にキーボードからNxNの行列を読み込む。これをbとする。 ## 解答例 ``` #include <stdio.h> #include <stdlib.h> /* malloc用 */ #include<stdbool.h> int main(void){ // Your code here! int i = 0; int k = 0; double d; int f; scanf("%d",&f); double *x_pointer[f]; for(i = 0; i < f; i++){ x_pointer[i] = (double*)malloc(sizeof(double) * f); } for (i = 0; i < f; i++) { for(k=0;k<f;k++){ scanf("%1lf", &d); x_pointer[i][k] = d; } } for (i = 0; i < f; i++) { for (k = 0; k < f; k++) { printf("%1.0lf",x_pointer[i][k]); } printf("\n"); } for (i = 0; i < f; i++) { for (k = 0; k < f; k++) { if((i!=k&&x_pointer[i][k]==0)||(i==k&&x_pointer[i][k]!=0)){ }else{ printf("0\n"); return 0; } } } printf("1\n"); return 0; }
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up