【数据结构】——线性表的使用之“有且仅有一”游戏

**

描述

接收一组数,范围是1~9的整数,试判断是否为9个,并且1~9都在且不重复。

输入

用户输入若干个1~9的整数,数之间用空格符隔开。若遇到输入0,则结束输入。

输出

判断输入的数是否满足1~9都存在,且不重复,并输出相应的结果。例如:

  1. 满足时, 输出 Right!
  2. 不满足时, 输出 Wrong!
  3. 输入的个数不等于9个时, 输出 The input is not correct!!**

【数据结构】——线性表的使用之“有且仅有一”游戏

#include<iostream>                            //iostream库,配合下面的调用全名域可以使用cin,cout 
using namespace std;
int main()
{
	int str[9];                              //建立一个存储空间为9的数组,命名为str; 
	int i,j,n,c;                             //i,j,为循环使用;n是用来存数据到数组里;c作为计数器 
	int m=0,l=0;                             //m和l都是用于比较的计数器 
	for(i=0;i<9;i++)               
	{
		cin>>n ;                             //输入n 
		if(n==0)                             //如果n是0则跳出输入循环语句 
		break;                                 
		else
		{
			str[i]=n;                        //否则将n的数据从1~9赋给str数组,并进行c计数 
		    c++;
		}
		
	}
	if(c!=9)                                 //输入的数不够9个,则按要求3输出 
	cout<<"The input is not correct!!";
	else                                     //否则(以下的语句都是满足数够9个) 
	{
		for(j=1;j<=9;j++)                    //循环j(用于1~9的数的比较) 
		{
			l=0;                             //为了使每次计数时l都从0开始计数; 
			for(i=0;i<9;i++)
			{
				if(j==str[i])                //如果在数组中找到了这个数,则l计数+1 
				l++;
				m+=l;                        //m用于计数l的和 
			}
		}
		if(m>=2)                             //当m大于等于2(即意为在1~9中,某个数出现了多次)
		cout<<"Wrong!";                      //此种情况,按要求2输出 
		if(m==1)                             //当m等于1时,满足了游戏要求有且仅有一,则输出1 
		cout<<"Right!";
	}
	return 0;
}

写在后面的一点

使用 m 和 l 一起做计数器,是因为要保证 l 在每次比较的时候都要从0开始计数,如果这样,到后面进行重复的统计时 l 只能是0,不存在 l =1或 l >=2的情况。
或许说可以把比较放在for循环里,那么在循环里带有输出,所以做了比较就会输出9个,不符合题意。故我写成了上述代码片。