杭电oj——田忌赛马(个人思路C++源代码)
心血来潮,凭着感觉写下来的一个简单代码,昨天在杭电oj浏览题目时偶然看到的,感觉比较有趣(不是小学语文课本里的故事吗?于是我想对其进行求解,哈哈,代码简单还存在诸多优化的地方,请大家多多指教)
#include <iostream>
using namespace std;
class tianji //创建一个tianji类,以便使得void main()里面的代码更加清晰和整洁
{
public:
void sort(int *a,int n) //先进行排序,以便对后续的求赢的次数统计
{
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[i]<a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
cout<<"排序后数组从大到小为:"<<endl;
for(i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int countD(int a[],int b[],int n) //统计田忌净赢场数
{
int count=0;
for(int w=0,v=0;w<n,v<n;)
{
if(a[w]>b[v]||a[w]==b[v])
{
count++;
++w;
++v;
}
if(a[w]<b[v])
{
count--;
w=w+0;
++v;
}
}
return count;
}
};
void main()
{
int n,lun;
cin>>lun;
while(lun--) //进行多少次循环
{
cout<<"请输入一共要进行多少次赛马:"<<endl;
cin>>n; //每次循环下进行多少场赛马
int a[1000],b[1000];
for(int u=1;u<=n;u++)
{
cin>>a[u];
}
for(int r=1;r<=n;r++)
{
cin>>b[r];
}
tianji sm; //创建一个对象
sm.sort(a,n); //排序
sm.sort(b,n);
y=sm.countD(a,b,n)*200; //赢输一场200块,并得到最终的报酬
cout<<"田忌赛马所最终的报酬为:"<<y<<endl;
}
}