Part I Preface
Part II Sketch
- 给定一个正整数 \(n\),表示汽车数量。
- 给定一个 \(n \times n\) 阶矩阵 \(A\),第 \(i\) 行 \(j\) 列上的数字表示 \(i\) 车与 \(j\) 车的对撞情况。
- \(\begin{aligned}\begin{cases}A_{i,j} = -1 & i,j\text{ 车没有对撞}\\A_{i,j} = 0 & i,j\text{ 车没有翻车}\\A_{i,j} = 1 & i\text{ 车翻车}\\A_{i,j} = 2 & j\text{ 车翻车}\\A_{i,j} = 3 & i,j\text{ 车均翻车}\end{cases}\end{aligned}\)
- 求出没有翻车的数量,和它们的编号。
Part III Analysis
输入矩阵,判断每个元素对应的情况,并且设定一个 bool
数组确定每辆车的情况,最后输出即可。
Part IV Code
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int N;
int arr1[MAXN][MAXN];
bool arr2[MAXN];
int ans;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N;
for(int i = 1; i <= N; i++){
for(int j = 1;j <= N;j++){
cin>>arr1[i][j];
if(arr1[i][j] == 1 && !arr2[i]){
arr2[i] = true;
ans++;
}else if(arr1[i][j] == 2 && !arr2[j]){
arr2[j] = true;
ans++;
}else if(arr1[i][j] == 3){
if(!arr2[i]){
arr2[i] = true;
ans++;
}
if(!arr2[j]){
arr2[j] = true;
ans++;
}
}
}
}
cout << N - ans << '\n';
for(int i = 1; i <= N; i++){
if(!arr2[i]) cout << i << ' ';
}
return 0;
}