C++ 如何在数组中查找数字中的奇数计数?

C++ 如何在数组中查找数字中的奇数计数?,c++,arrays,C++,Arrays,我试图找出数组元素整数中奇数的总数。例如,输入的数组为{113、220、235},输出为: First element has 3 odd numbers. Second element has 0 odd numbers. Third element has 2 odd numbers. 到目前为止,我遇到了以下代码 int optionKS; int* arrPtrKS; int sizeKS; int oddDigitcount; cout << "\n

我试图找出数组元素整数中奇数的总数。例如,输入的数组为{113、220、235},输出为:

First element has 3 odd numbers.
Second element has 0 odd numbers.
Third element has 2 odd numbers.
到目前为止,我遇到了以下代码

 int optionKS;
 int* arrPtrKS;
 int sizeKS;
 int oddDigitcount;

 cout << "\nWhat is the size of the array? ";
         cin >> sizeKS;
         cout << "\n";
         arrPtrKS = new int[sizeKS];

         for (int i = 0; i < sizeKS; i++) {
             cout << "  Value #" << i + 1 << " ";
             cin >> arrPtrKS[i];
         }

 for (int i = 0; i < sizeKS; i++) {

     while (arrPtrKS[i] > 0) {
         if (arrPtrKS[i] % 2) {
             oddDigitcount++;
         }

         arrPtrKS[i] /= 10;
     }
     
 }
     
int选项;
int*arrPtrKS;
int sizeKS;
int-oddDigitcount;
cout>sizeKS;

你差点就到了。oddDigitCount为整个数组保留。因此,最好跟踪for循环中的值,并在每次迭代后打印它

(也可以使用vector跟踪这些值,而不是自己管理arrptRk的内存,因为您没有执行
删除arrptRk

std::vector<int> arrPtrKS {113,220,235};

for (int i = 0; i < arrPtrKS.size(); i++)
{
    int oddDigitcount = 0;
    int originalValue = arrPtrKS[i];
    while (arrPtrKS[i] > 0) 
    {
        if (arrPtrKS[i] % 2) 
        {
            oddDigitcount++;
        }

        arrPtrKS[i] /= 10;
    }     
    std::cout << originalValue << " has " << oddDigitcount << " odd digits" << std::endl;
}
std::向量arrPtrKS{113220235};
对于(int i=0;i0)
{
如果(arrPtrKS[i]%2)
{
oddDigitcount++;
}
arrPtrKS[i]/=10;
}     

std::cout您应该将逻辑放入一个单独的函数中

int calculate_odd_digits(int n)
{
  int odd_digits = 0;
  while (n > 0)
  {
    if (n % 2 != 0)
    {
      ++odd_digits;
    }
    n /= 10;
  }
  return odd_digits;
}
然后你可以在你的数组中循环

for (int i = 0; i < sizeKS; ++i)
{
  std::cout << arrPtrKS[i] " has " << calculate_odd_digits(arrPtrKS[i]) << " odd digits.\n";
}
for(int i=0;istd::cout实际上,您几乎就到了。在下面的代码中,您正在计算每个元素的奇数。只有oddDigitCount在计算整个数组

对于(int i=0;i (在您的帖子中,这段代码上面的代码只会询问您的输入。)

这意味着,如果你创建一个映射向量,你可以计算每个元素的奇数,将它们与你正在检查的数字一起添加到映射中。然后你将得到一个向量,其中包含数字的映射及其奇数计数

只需在它们之间循环并打印您希望看到的内容:)

记住,模将产生除法的差


PS:别忘了垃圾收集!

您可以创建一个函数,将奇数位数的计数保存在一个数字(数组块)中

此函数将计算单个数字中的奇数位数

int main()
{
 int OddDigitSum=0,OddNumbers=0;
 int arr[10]={1,3,31,57,923,46,20730,30,111,996};

 for(int i=0;i<10;i++){
 OddDigitSum=OddDigitSum+Coundadd(arr[i]);

 if(arr[i]%2==0){
    OddNumbers++;
 }
 }

  cout<<OddDigitSum<<"\n";
  cout<<OddNumbers<<"\n";

  return 0;
 }
intmain()
{
int-OddDigitSum=0,odddnumbers=0;
int arr[10]={1,3,31,57923,4620730,30111996};

for(int i=0;iset
oddDigitcount
0
在for循环的每次迭代开始时?相关:我想知道您是否甚至需要一个数组,更不用说手动管理的动态数组了。当以某种方式处理一系列值时(在这种情况下,为每个值计算奇数)只有在(a)以后需要时才需要保留读取后的值,因为任何计算都依赖于序列中的多个值,或者(b)以后使用值本身(例如用于排序等)。这两者都不适用。您只需读取一个值,计算感兴趣的数字,相应地更新
oddDigitcount
,然后转到下一步。
int Coundadd(int n)
{
  int count=0,rem=0;
  while(n)
    {
     rem=n%10;

     if(rem%2!=0){
        count++;
      }
    n=n/10;
    }
  return count;
}
int main()
{
 int OddDigitSum=0,OddNumbers=0;
 int arr[10]={1,3,31,57,923,46,20730,30,111,996};

 for(int i=0;i<10;i++){
 OddDigitSum=OddDigitSum+Coundadd(arr[i]);

 if(arr[i]%2==0){
    OddNumbers++;
 }
 }

  cout<<OddDigitSum<<"\n";
  cout<<OddNumbers<<"\n";

  return 0;
 }