C++ 计算数组中的位数(c+;+;)

C++ 计算数组中的位数(c+;+;),c++,arrays,for-loop,if-statement,C++,Arrays,For Loop,If Statement,假设我有一个数组 arr[5]={5,2,3,2,5},我为它编写了以下程序 #include <iostream> using namespace std; int main() { int n; cout<<"Enter Length of Elements= "; cin>>n; int arr[50]; for(int i=0;i<n;i++) { cout<<"Enter Number=";

假设我有一个数组 arr[5]={5,2,3,2,5},我为它编写了以下程序

#include <iostream>
using namespace std;
int main()
{
  int n;
  cout<<"Enter Length of Elements= ";
  cin>>n;
  int arr[50];
  for(int i=0;i<n;i++)
  {
      cout<<"Enter Number=";
      cin>>arr[i];
  }
  for(int i=0;i<n;i++)
  {
      int countNum=1;


      for(int j=i+1;j<n;j++)
      {
          if(arr[i]==arr[j])
          {
              if(i>0)
              {
                  int countNum2=0;


                  for(int k=0;k>i;k++)
                  {
                      //bool repeat=false;

                      if(arr[i]==arr[k])
                      {
                        //repeat=false;
                      }
                      else
                      {
                          countNum2++;
                      }
                  }
                  if(countNum2==i)
                  {
                     countNum++;
                  }
              }
              else
              {
                countNum++;
              }
          }
          else
          {
              for(int k=0;k<i;k++)
              {
                  if(arr[k]==arr[i])
                  {

                  }
                  else
                  {
                      countNum=1;
                  }

              }
          }

      }
      cout<<arr[i]<<" has appeared "<<countNum<< "Times"<<endl;

  }

    return 0;
}
#包括
使用名称空间std;
int main()
{
int n;
coutn;
int-arr[50];

对于(int i=0;i这正是您需要的(数组中每个数字的数量):

//我们将像键值对一样存储大量的数字。
//地图正是我们所需要的。作为一把钥匙,我们会的
//将数字和存储为密钥对应计数器
标准::地图数字计数;
//有我们的解释更简单
//堆栈上的数组,因为它帮助我们
//思考一些特定于语言的事情
//喜欢内存管理,关注算法
常量int arr[]={5,2,3,2,5};
//迭代数组中的每个元素
用于(常量自动元素:arr)
{
//std::map的运算符[]创建默认值
//元素。对于大小,它是0。
//所以我们可以在数字的每个外观上加1
//在其计数器的数组中。
数字计数[elem]+=1;
}
//现在只需迭代容器中的所有元素
//print result.std::map的迭代器是一对,第一个元素是哪个
//是一个键(数组中的数字),第二个元素是一个值
//(对应计数器)
用于(常量自动和元素:数字计数){

std::cout代码的问题在于,您没有删除重复项或分配一个数组来有效地存储数组中每个唯一元素的计数

而且,使用如此多的循环是完全没有必要的

您只需要实现两个循环,外部循环遍历所有元素,内部循环首先检查重复(使用数组检查频率/发生状态),并使用一个用作计数器的变量分别计算每个元素的外观

将计数器数组(与所取数组的相应大小)设置为特定值(例如零),并在遍历数组时出现相同元素时更改该值,以触发不再计算该值

然后,每次内部循环完成对整个数组的迭代时,将计数器变量的计数值传输到计数器数组(我们设置的计数器数组,用于区分重复的计数器数组)。(即,将其放置在值计数之后)

只需稍加修改,您的代码就可以按您希望的方式工作:

#包括
使用名称空间std;
int main()
{
int n;
coutn;
int-arr[50];

对于(int i=0;位数或一个数字的计数?“为什么我得到5已出现两次”-你是什么意思?这不是预期的输出还是2?而且使用这么多循环是完全不必要的。你想要数组中每个唯一数字的计数吗?我不想一次又一次地打印那些已打印的数字这正是“唯一”的意思我不是C++高级的,我是在BASICI上不知道maps@ProBoy我现在正在写一个基本的解决方案,它将很快出现在我的答案中:“我不是C++的高级,我是基础的,它是什么,什么是“基础”的C++。。如果要与另一种语言Python进行比较,请使用“映射”在Python中,几乎在学习语言的第一周就学会了。@ PulcMcKunZi,但是在Python <代码> map < /Cord>完全不同:它是一个函数,它将函数应用到集合的每个元素中。在C++中,它是一个容器!您必须在这里动态地分配内存<代码> int计数[n]={ 0 }。;
,因为
n
不是编译时常量