链接: link.
我们采取暴力遍历即可
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
char s[510][510];
int n,m;
cin >> n >> m;
for(int i=1; i<=n; i++)
{
cin >> s[i];
}
for(int i=0; i<m; i++)//按列遍历,每次排查一列
{
int k=0;
for(int j=n; j>=1; j--)
{
if(s[j][i]=='o')
{
k=j;
while(s[k+1][i]!='#'&&s[k+1][i]!='o'&&k+1<=n)//看是否能一直往下走
{
++k;
}
swap(s[j][i],s[k][i]);//交换
}
}
}
for(int i=1; i<=n; i++)
{
for(int j=0; j<m; j++)
{
cout << s[i][j];
}
cout << endl;
}
return 0;
}
链接: link.
这个题求的是最长增减序列,我们有用dp解决
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int n,i,j,ans = 0;
int num[55];
int dp[55][2];
cin>>n;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
cin>>num[i];
}
for(i=1;i<=n;i++)
{
dp[i][0] = 1;
dp[i][1] = 1;
}
for(i=1;i<=n;i++)
{
for(j=i-1;j>0;j--)
{
if(num[i]>num[j])
{
dp[i][0] = max(dp[j][1]+1,dp[i][0]);
}
else if(num[i]<num[j])
{
dp[i][1] = max(dp[j][0]+1,dp[i][1]);
}
}
ans = max(max(dp[i][0],dp[i][1]),ans);
}
cout<<ans;
return 0;
}
链接: link.
概率问题,直接暴力解决
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i,j,k,g;
double t=0.00000;
int n[10],m[10];
for(i=1; i<=6; i++)
{
cin >> n[i];
}
for(i=1; i<=6; i++)
{
cin >> m[i];
}
k=0;
g=0;
for(i=1; i<=6; i++)
{
for(j=1; j<=6; j++)
{
if(n[i]>m[j])
{
k++;
}
else if(n[i]<m[j])
{
g++;
}
}
}
t=k*1.00000/(k+g);
cout << fixed << setprecision(5) << t;
return 0;
}