#include
#include
using namespace std;
int main()
{
int arr[1100]={0},brr[1100]={0},crr[1100]={0};
int s,m,n,sum,cot,k;
while(cin>>n)
{
k=cot=sum=m=s=0;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
for(int i=0;i<n;i++)
{
cin>>brr[i];
}
sort(arr,arr+n,less<int>());
sort(brr,brr+n,less<int>());
for(int j=0;j<n;j++)
{
if(arr[j]>brr[m])
{
sum++;
m++;
}
else crr[s++]=arr[j];
}
for(s=0;m<n;m++,s++)
{
if(brr[m]==crr[s])
{
cot++;
}
}
k=sum*200-(n-sum-cot)*200;
cout<0;
}
我写的代码用示例测试过是正确的,但是提交后显示答案错误,我还有什么没考虑到的情况吗,望学长学姐指正。
降序排好后,将田忌的第一匹马与齐王的第一匹马比较,如果小,则与齐王下一匹马比较,直到找到一个能超过的,就记录能快的马数量为1,然后继续判断田忌下一匹马,与齐王刚比较过的马的下一匹马比较,如此循环,记录能快的马的数量,直到田忌的某匹马比齐王最后一匹马还慢则结束。
然后判断能快的马的数量和马的总数量,如果少于一半,则赢钱为0,否则超出的马的数量乘以200为赢的钱
这段代码存在一些问题,具体如下:
解决思路如下:
修改后的代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int arr[1100] = {0}, brr[11] = {0};
for(int i = 0; i < 10; i++)
{
int x;
cin >> x;
if(x < 1 || x > 1000) continue;
arr[x]++;
}
for(int i = 1; i <= 1000; i++)
{
if(arr[i] == 0) continue;
int x = arr[i];
while(x > 0)
{
int k = x % 10;
brr[k]++;
x /= 10;
}
}
for(int i = 0; i < 10; i++)
{
cout << brr[i] << " ";
}
cout << endl;
return 0;
}