【问题描述】
为了丰富人民群众的生活、支持某些社会公益事业,某市设置了一项彩票。该彩票的规则是:
(1) 每张彩票上印有7个各不相同的号码,且这些号码的取值范围为1---33。
(2) 每次在兑奖前都会公布一个由七个各不相同的号码构成的中将号码。
(3) 共设置7个奖项,特等奖和一等奖至六等奖。对奖规则如下:
特等奖:要求彩票上的7个号码都出现在中将号码中。
一等奖:要求彩票上有6个号码出现在中将号码中。
二等奖:要求彩票上有5个号码出现在中将号码中。
三等奖:要求彩票上有4个号码出现在中将号码中。
四等奖:要求彩票上有3个号码出现在中将号码中。
五等奖:要求彩票上有2个号码出现在中将号码中。
六等奖:要求彩票上有1个号码出现在中将号码中。
注:兑奖时并不考虑彩票上的号码和中将号码中的各个号码出现的位置。例如,中将号码为23 31 1 14 19 17 18,则彩票12 8 9 23 1 16 7由于其中有两个号码(23和1)出现在中号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
【输入】
第一行只有一个自然数n,表示小明买的彩票张数;
第二行存放了7个介于1和33之间的自然数,表示中奖号码;
在随后的n行中每行都有7个介于1和33之间的自然数,分别表示小明所买的n张彩票。
每一行中的相邻的两个数之间都用一个空格隔开。
【输出】
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
【输入输出样例】
lottery.in | lottery.out |
2 23 1 11 14 19 17 18 12 8 9 23 1 16 7 11 7 10 21 2 9 31 | 0 0 0 0 0 1 1
|
【数据范围限制】
30%的数据:n<=100。
70%的数据:n<=1000。
100%的数据:n<=10000。
实现:
#region 彩票获奖
public void GetZhongJiangNum()
{
StreamReader sr = File.OpenText("lottery.in");
StreamWriter sw = File.CreateText("lottery.out");
int rows = int.Parse(sr.ReadLine());
string[] ZJHM = sr.ReadLine().Split(" ".ToCharArray());
string strLine = null;
int[] num = new int[7];
int count = 0;
while ((strLine = sr.ReadLine()) != null)
{
count = 0;
string[] MYHM = strLine.Split(" ".ToCharArray());
foreach (string str in MYHM)
{
if (ZJHM.Contains(str))
{
count++;
}
}
if (count != 0)
{
num[7 - count] += 1;
}
}
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < num.Length; i++)
{
if (i == num.Length - 1)
{
sb.Append(num[i].ToString());
}
else
{
sb.Append(num[i].ToString() + " ");
}
}
sw.WriteLine(sb);
sw.Flush();
sr.Close();
sw.Close();
}
#endregion