解题思路:
一开始看到是想到田忌赛马的故事,题目也就是按照田忌赛马的思路来求赢的最多场数
这题我还真的是投机取巧AC的,原本想试试的而已,结果却AC了,我都笑了
我的思路是这样的
a是某君 ,b是钟神
对a进行降序排序,对b进行升序排序,也就想按照田忌赛马的思想,下马对上马,中马对下马,上马对中马,这样子可以赢两场输一场赢50
所以 对a进行降序排序,对b进行升序排序,
然后单独对a[1]和b[1]进行比较,如果b[1]>a[1],那么win++;
随后从下标2开始到下标n进行遍历
如果a[i]<b[i],则win++
最后输出win*50的数字
接下来说说投机取巧就在这里
如 输入 4 4 2 1 3 4 3 1 4
排序对比后有
a: 4 3 2 1 编一个序号为1-4好了 ,即a1我想表示为 4 ,a2表示为3,只是为了方便理解而已
b: 1 3 4 4
如果按照正常田忌赛马来想,肯定第一个就是 a1-4 对b1-1,第一场:用下马对上马,输了
第二场: 剩下 a: 3 2 1 b: 3 4 4,那肯定想到用b3-4对a1-3,赢了
第三场: 剩下 a: 2 1 b: 3 4, 那肯定想到用a1-2对b1-3,赢了
第四场: 剩下 a: 1 b: 4 ,那肯定赢了
结果就是赢3输一 赢的钱就是 :3*50-1*50 = 100;
如果按照我投机取巧的思路,只算赢的,也就是说,没有输,我只算赢的
单独对排序后的 a[1]和b[1],对比,赢了就win++,输了或者平都没赢,就算输了我也不算输
上面的例子
a[1]和b[1]比较,很明显输了,但是我不算输,只算赢,没赢,所以win还是0
随后从下标2开始到下标n进行遍历, 如果a[i]<b[i],则win++
a[2] 和b[2] 平了,win+=0;
a[3] 和b[3] 赢了,win++;
a[4] 和b[4] 赢了,win++;
所以最后赢了2局,输出就是win*50 = 2*50 = 100;
结果和田忌赛马一样,所以这算是投机取巧了吧.............
注意事项:
参考代码:
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<functional>
#include<math.h>
using namespace std;
bool cmp(int a, int b){
return a > b;
}
int main(){
int n,i,j,win;//win是代表赢的场数
int a[1000], b[1000];//a是存储某君的每辆车速度,b是存储钟神的每辆车速度
while (cin >> n){
win = 0;//每次初始化为0
for (i = 1; i <= n; i++)cin >> a[i];
for (i = 1; i <= n; i++)cin >> b[i];
sort(a + 1, a + n,cmp);//降序排序
sort(b + 1, b + n);//默认升序,所以不用自己写cmp
if (a[1] < b[1])win++;
for (i = 2; i <= n; i++){
if (a[i] < b[i])win++;
}
cout << win * 50 << endl;//输出赢的钱
}
return 0;
}
0.0分
6 人评分
点我有惊喜!你懂得!浏览:2754 |
C语言训练-求素数问题 (C语言代码)浏览:989 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:766 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:757 |
矩形面积交 (C语言代码)浏览:1553 |
成绩转换 (C语言代码)浏览:1048 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:699 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:910 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1186 |