---
# System prepended metadata

title: プログラミング基礎WS問題

---

# プログラミング基礎WS問題
## 問題文（多重ループ・ポインタの問題)
実数型2次元配列$x[N][N]$(Nは定数)を正方行列と考える．
正方行列$x$を入力から読み取り，対角行列かどうか判定するプログラムを作成しなさい．
$x$をポインタx_pointerで受け取り，この正方行列が対角行列であれば１を返し，そうでなければ０を返しなさい．なお，対角行列とは，正方行列で$Aij=0(i≠j)$の行列のことをいう．

## 制約
* 3<=N<=5
## 入力
入力は以下の形式で標準入力から与えられる。

```
abc
cef
ghi
```
## 出力
問題文の指示に従って対角行列か判定し、対角ならば１、対角でないならば０を出力せよ

## 入力例1
```
200
030
004
```
## 出力例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;
}
