c++判断输入不同位置重复数字的各自次数
![](https://img.haomeiwen.com/i16329138/7e94e5eac800c79f.png)
我拿数组来实现:
#include<iostream>
#include<Windows.h>
using namespace std;
int main(void){
int q=0; //a数组中有效数字的个数,初始为0;
int d=0; //固定a[0]辅助作用;
int n=0; //输入的数字
int num1=0;//每次输入n于a[]有效数字不相等的个数
int num2; //传给输出语句;
int a[20]; //放置有效数字,比如 1 2 3 2 1;要实现只存123就行;
int b[20]={0}; //计数器; 定义b数组所有元素为0;
cout<<"按Ctrl+z结束"<<endl;
while(cin>>n){
if(d==0){ //使输入的一组n的第一个数先固定为a[0];
a[0]=n;
d=d+1;
}else{ //第二个数开始就会在下面运行;
for(int i=0;i<=q;i++){ //从0到有效数字循环,q:有效数字,刚开始为a[0],下面还要增加的.
if(a[i] == n){ // 1. 如果输入数字m和a[]数组的有效数字有一样,则下一步;
b[i]++; //则在b[i]数组的i位置(检索的第一个相同的位置,且有且只有一个)+1,.....存储次数
q=q-1; //并且有效数字-1
}else{ // 2. 输入的n和存在a[]无雷同的时候;
num1++; //不相等的个数;
}
if(num1==(q+1)){ //3. 检索的不相等的个数和一旦==有效的数字个数,则把n填上去
a[num1]=n;
num2=num1; //在下面num1清零之前把长度传给全局变量,输出要用.
}
}
num1=0; //每次输入的n都要重新查找,所以要把局部变量num1清零
q++; /*有效的长度也要多一个,上面的q=q-1,就是一旦有一样的就要把数据扔了,有效车长度-1,现在+1相当于没变
如果和前面的数据不一样,现在+1正好多一个*/
}
}
//以下是输出;
cout<<"a[]的有效元素有:"<<endl;
for(int x = 0;x<=num2;x++){
cout<<a[x]<<" ";
}
cout<<endl;
cout<<"b[]的次数:"<<endl;
for(int x = 0;x<=num2;x++){
cout<<b[x]+1<<"次"<<" ";
}
cout<<endl<<endl<<endl<<endl;
for(int q=0;q<=num2;q++){
cout<<a[q]<<"发生了"<<b[q]+1 <<"次"<<endl;
}
system("pause");
return 0;
}
怎么把代码格式写上去a,不太会,我直接沾上了,再附上效果图.
![](https://img.haomeiwen.com/i16329138/94800acd171f4254.png)
![](https://img.haomeiwen.com/i16329138/bd5978409cf389d2.png)
![](https://img.haomeiwen.com/i16329138/9d5df3198f1c232d.png)
![](https://img.haomeiwen.com/i16329138/d7fe3cfc96fd61a9.png)
主要是实现的是思想,代码只是工具,比如,这个代码不会存储多余的数据,输入1 2 3 2 1,会把多的2 3扔掉,并给前面加一个次数...