用一维数组写时没思路了
一维数组标记还是挺麻烦的,所以我们使用二维数组标记。
可如何标记?
题目说每个人要在他们的休息时间依次打完m场比赛,所以有的人虽然同一天有休息,但做的可能不是同一套试题
所以我们在输入每个人哪一天有休息时,也要判断ta打的是哪一场比赛
代码如下:
long long a[10005][10005];
long long n,m,k,x;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>x;
//第i个人在第x天,第j场打
a[x][j]=1;//因为第x天第j场比赛有人打,记录一下
}
}
可以定义一个ans记录,然后在a[i][j]不为0时记录一次(i为第几天,j为第几场比赛)
代码:
for(int i=1;i<=k;i++){
int ans=0;
for(int j=1;j<=m;j++){
if(a[i][j]!=0)
ans++;//第i天第j场比赛有人打
}
cout<<ans<<" ";
}
#include<bits/stdc++.h>
using namespace std;
long long a[10005][10005];//代表第i天的第j场比赛有没有人打
int main(){
long long n,m,k,x;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>x;
//第i个人在第x天,第j场打
a[x][j]=1;//因为第x天第j场比赛有人打,记录一下
}
}
for(int i=1;i<=k;i++){
int ans=0;
for(int j=1;j<=m;j++){
if(a[i][j]!=0)
ans++;//第i天第j场比赛有人打
}
cout<<ans<<" ";
}
return 0;
}
冒泡排序忘记写了(其实不用冒泡写)
我们要再定义一个mp数组来表示书架编号,然后对应的书籍编号和对应的书架编号放一起即可
所以当a[i]!=i时,证明它没有放在正确的位置上,就要把他与对应书架编号的书本颠倒,次数ans就要+1
#include<bits/stdc++.h>
using namespace std;
int a[1000005],mp[1000005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];//书籍编号
mp[a[i]]=i;//书架编号
}
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]!=i){//当书架编号不等于书籍编号时
mp[a[i]]=mp[i];
swap(a[i],a[mp[i]]);//颠倒
ans++;
}
}
cout<<ans;
return 0;
}