这是一个彩票游戏。每个顾客可以拥有一张或多张票。门票的号码序列为 6 位数字。每个位置可以有数字0-9。
有幸运券号码。客户可以根据数字与位置的匹配来获得差异。以下代码将描述礼物选择过程:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<string> customerTickets;
string luckyTicket;
int totalNumberOfTickets;
cin>>totalNumberOfTickets;
for(int i=0; i<totalNumberOfTickets; ++i) {
string s;
cin>>s; // 6 digit long string
customerTickets.push_back(s);
}
cin>>luckyTicket;
int totalGiftAmount = 0;
for(int i=0; i<totalNumberOfTickets; ++i) {
int match = 0;
for(int j=0; j<6; ++j) {
if(customerTickets[i][j] == luckyTicket[j]) match++;
}
if(match==6) totalGiftAmount+=100;
else if(match==5) totalGiftAmount+=50;
else if(match==4) totalGiftAmount+=40;
else if(match==3) totalGiftAmount+=10;
}
cout<<totalGiftAmount;
}
我需要摆脱循环。因为我需要查看千元幸运券的赠品金额。是否可以在 O(1) 内计算出礼物金额?
你们的程序表明中奖数字在幸运彩票和中奖彩票中的位置应该相同。订单算吗? 接受这一点,为什么不声明一个 Ticket 类,将其用于 luckyTicket 和 customerTickets 向量?为什么不使用 stl 算法,切换比 ifelseifelseif 更可读,有时更快? 我会像这样编码stg
#include <algorithm>
#include <iostream>
#include <string>
class Ticket {
public :
Ticket () : val_ (6, '0') {}
Ticket (const Ticket& t) : val_ (t.val_) {}
~Ticket () {}
int match (const Ticket& t) const {
int n (0);
auto i (val_.begin ()), j (t.val_.begin ());
for (; i != val_.end (); ++i, ++j) n += (*i == *j)?1:0;
return n;
}
int gift_amount (const Ticket& luckyticket) const {
int s (0);
switch (match (luckyticket)) {
case 3 : s += 10; break;
case 4 : s += 40; break;
case 5 : s += 50; break;
case 6 : s += 100; break;
}
return s;
}
void read (std::istream& is) {
is >> val_;
}
std::string val_;
};
int main (int argc, char* argv []) {
int totalNumberOfTickets;
std::cout << "number of ticket : "; std::cin >> totalNumberOfTickets;
std::vector<Ticket> customerTickets (totalNumberOfTickets, Ticket ());
Ticket luckyTicket;
std::cout << "lucky ticket : " << std::endl;luckyTicket.read (std::cin);
std::cout << "tickets :" << std::endl;
{
auto i ((int) 0);
std::for_each (customerTickets.begin (), customerTickets.end (), [&i] (auto& t) {
std::cout << "\tticket " << i << " : " << std::endl;
t.read (std::cin);
++i;
});
}
auto totalGiftAmount ((int) 0);
std::for_each (customerTickets.begin (), customerTickets.end (), [&totalGiftAmount, &luckyTicket] (const auto& t) {
totalGiftAmount += t.gift_amount (luckyTicket);
});
std::cout << "TotalGiftAmount == " << totalGiftAmount << std::endl;
return 0;
}