C++ 如何在数组中查找数字中的奇数计数?
我试图找出数组元素整数中奇数的总数。例如,输入的数组为{113、220、235},输出为: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
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;i std::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;isetoddDigitcount
到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;
}