我的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,a[7],b[7],i,j,z=0,_1=0,_2=0,_3=0,_5=0,_4=0,_6=0,t=0;
cin>>n;
for(i=0;i<7;i++)
{
cin>>a[i];
}
for(i=0;j<n;j++)
{
z=0;
for(i=0;i<7;i++)
{
cin>>b[i];
}
for(i=0;i<7;i++)
{
if(b[i]==a[i])
z++;
}
if(z==1)
_6++;
if(z==2)
_5++;
if(z==3)
_4++;
if(z==4)
_3++;
if(z==5)
_2++;
if(z==6)
_1++;
if(z==7)
t++;
}
cout<<t<<' '<<_1<<' '<<_2<<' '<<_3<<' '<<_4<<' '<<_5<<' '<<_6<<' ';
return 0;
}
显示输出:
0 0 0 0 0 0 0
有两个问题:
11行的for循环的j打成i了
整体的思路还忽略了一点,题意里说明了兑奖时并不考虑彩票上的号码和中奖号码中各个号码出现的位置,而在你的代码里的思路是如果第i位的号码相同才会计数。结合彩票的号码都在1到33之间,可以考虑用数组a[i]表示号码i出现的次数,然后进行判断。
首先,我们先添加几条记录,可以用程序添加或者直接修改 order.txt 文件
order.txt 文件内容如下:比如我们有三名同学分别产生了 3 条预约记录
在 student 类的成员函数 showMyOrder 中添加代码
// 查看自身预约
void Student::showMyOrder() {
OrderFile of;
if (of.m_Size == 0)
{
cout << "无预约记录" << endl;
system("pause");
system("cls");
return;
}
for (int i = 0; i < of.m_Size; i++)
{
// string 转 int
// string 利用 c_str() 转 const char*
// 利用 atoi(const char*) 转 int
if (atoi(of.m_OrderData[i]["stuId"].c_str()) == this->m_Id)
{
cout << "预约时期:周" << of.m_OrderData[i]["date"]
<< " 时段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午")
<< " 机房:" << of.m_OrderData[i]["roomId"] << "号";
string status = " 状态:"; // 0 为取消,1 为 审核中,2 为已预约, -1 为预约失败
if (of.m_OrderData[i]["status"] == "1")
{
status += "审核中";
}
else if (of.m_OrderData[i]["status"] == "2")
{
status += "预约成功";
}
else if (of.m_OrderData[i]["status"] == "0")
{
status += "预约取消";
}
else if (of.m_OrderData[i]["status"] == "-1")
{
status += "预约失败";
}
cout << status << endl;
}
}
system("pause");
system("cls");
};
string 转 int
string 利用 c_str() 转 const char*
利用 atoi(const char*) 转 int