看上去很简单但实现起来稍微有点麻烦的题目
题目要求:定义一个较简单的数组,包含几个重复的数,输出其中出现过的数值,每个相等的数据值输出一次。
构思:
第一部分 定义一堆东西,为第二部分做铺垫(实际构思是在第二部分之后)
int a[10]={1,2,3,3,1,2,6,4,3,4};
bool ifcx[10];//用于判断数字是否出现过
int n=10;
int *ku=new int[n];//用于存放出现过的数字
for(int i=0;i<10;i++)//第一条给数组变量赋值,第二条可不写(全局中的bool数组变量初始为false)
{
ku[i]=0;
ifcx[i]=false;
}
第二部分用于判断,是最主要部分,烦的就是这里判断后的执行语句
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]==ku[j])//若出现过则退出循环
break;
else if(ku[j]==0)//若是新数字,标记
{
ku[j]=a[i];
ifcx[i]=true;
break;
}
else//若还没寻找到相同数且没寻找完,则继续判断
continue;
}
}
第三部分判断是否第一次出现,若是,则输出
for(int i=0;i<10;i++)
{
if(ifcx[i]==true)
cout<<a[i]<<endl;
}
完整程序
#include
using namespace std;
int main()
{
int a[10]={1,2,3,3,1,2,6,4,3,4};
bool ifcx[10];//用于判断数字是否出现过
int n=10;
int *ku=new int[n];//用于存放出现过的数字
for(int i=0;i<10;i++)//第一条给数组变量赋值,第二条可不写(全局中的bool数组变量初始为false)
{
ku[i]=0;
ifcx[i]=false;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]==ku[j])//若出现过则退出循环
break;
else if(ku[j]==0)//若是新数字,标记
{
ku[j]=a[i];
ifcx[i]=true;
break;
}
else//若还没寻找到相同数且没寻找完,则继续判断
continue;
}
}
for(int i=0;i<10;i++)
{
if(ifcx[i]==true)
cout<<a[i]<<endl;
}
delete ku;
return 0;
}