Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在X元素数组中重复_C++_C - Fatal编程技术网

C++ 在X元素数组中重复

C++ 在X元素数组中重复,c++,c,C++,C,我有一个间隔(m,n),在那里我必须打印出所有不同数字的数字。我写了这个,但它只适用于2位数字。我只是不知道如何使它的任何工作,但2位数字。我想,如果我添加的for循环数和我的数字数一样多,它就会工作,但是没有指定间隔(m,n),所以它必须是可靠的。我已经试着自己解决这个问题6个小时了,我实在受够了 输入97113; 输出97,98102103104105106107108109 数字99100101110+无法打印,因为它们有两个数字是 同样的 #include<conio.h&g

我有一个间隔(m,n),在那里我必须打印出所有不同数字的数字。我写了这个,但它只适用于2位数字。我只是不知道如何使它的任何工作,但2位数字。我想,如果我添加的for循环数和我的数字数一样多,它就会工作,但是没有指定间隔(m,n),所以它必须是可靠的。我已经试着自己解决这个问题6个小时了,我实在受够了

输入97113; 输出97,98102103104105106107108109 数字99100101110+无法打印,因为它们有两个数字是 同样的

   #include<conio.h>
    #include<math.h>
    #include<stdio.h>
    int main()
    {
    int m,n,test,checker=0;
    scanf("%d%d",&m,&n);
    if(m>n)
    {
        int holder=n;
        n=m;
        m=holder;
    }

    for(int start=m;start<=n;start++)
    {
        int itemCount=floor(log10(abs(start)))+1;

        int nums[itemCount];
        int index=0;
        test=start;
        do
        {
        int nextVal = test % 10;
        nums[index++]=nextVal;
        test = test / 10;
        }while(test>0);
        for (int i = 0; i < itemCount - 1; i++) 
        { // read comment by @nbro
        for (int j = i + 1; j < itemCount; j++) 
        {
            if (nums[i] == nums[j]) 
            {
               checker++;      
            }
        }
            if(checker==0)printf("%d ",start);

        }
            checker=0;
     }
     }
#包括
#包括
#包括
int main()
{
int m,n,test,checker=0;
scanf(“%d%d”,&m,&n);
如果(m>n)
{
int holder=n;
n=m;
m=支架;
}
对于(int start=m;start0);
对于(int i=0;i
作为一种设计理念:

  • 如果数字不是字符串,则将其打印为字符串

  • 声明
    intd[10]的数组并将其设置为全零

  • 对于字符串的每个ascii数字
    c

    if(d[c-'0']==1)返回0;//此数字已存在于数字中

    else d[c-'0']=1

只要把
放在(checker==0)printf(“%d”,开始)上即可第二个循环之外的循环

像这样

for (int i = 0; i < itemCount - 1; i++)
    { 
            for (int j = i + 1; j < itemCount; j++)
            {
                if (nums[i] == nums[j])
                {
                   checker++;
                   break;
                }
            }
    }

    if(checker==0)
        printf("%d ",start);
        checker=0;
for(int i=0;i

但是,您可以使用更有效的计数数组来检查1个数字,而不是对
循环使用两个嵌套的

X=10; //number to analyze
char counts[10]; for int i=0;i<10;i++) counts[i]=0;
char number[10];
sprintf(&number,"%s",X); bool bad=false;
for(int i=0;i<strlen(number);i++) 
{
 if(++counts[number[i]-'0']>1) {bad=true;break;}
}`
X=10//要分析的数字

字符计数[10];对于int i=0;i> p>因为你把这个标记为C++,这里是一个非常简单的解决方案,使用简单的模数和除法在一个循环中。未完成到字符串的转换

#include <iostream>
#include <bitset>

bool is_unique_digits(int num)
{
    std::bitset<10> numset = 0;
    while (num > 0)
    {
        // get last digit
        int val = num % 10;

       // if bit is on, then this digit is unique
        if (numset[val])
            return false;

        // turn bit on and remove last digit from number
        numset.set(val);
        num /= 10;
    }
    return true;
}

int main()
{
    for (int i = 97; i <= 113; ++i)
    {
        if (is_unique_digits(i))
            std::cout << i << "\n";
    }
}
#包括
#包括
布尔是唯一的数字(整数)
{
std::位集numset=0;
while(num>0)
{
//得到最后一位数
int val=num%10;
//如果位为on,则此数字是唯一的
if(numset[val])
返回false;
//打开位并从数字中删除最后一位
数值集(val);
num/=10;
}
返回true;
}
int main()
{

对于(int i=97;i Hi.发布代码时,您可以通过正确使用代码来提高可读性。许多编辑器都具有某种自动缩进功能。此外,您能否提供一些预期输入/输出的示例?那么,是否要打印给定数字的排列?与其将所有工作塞进
main
,不如创建一个函数
bool是唯一的数字(int num)
并且只在该函数中工作,如果传递的数字具有唯一的数字,则返回
true
,否则返回
false
。然后它在
main
-
中成为一个简单的循环,用于(int i=startnum;i你已经标记了C和C++语言,它们是不同的。例如,C++中,你可以用“代码> STD::String 来处理字符串。C语言没有<代码> STD::String 类型。你应该看看它的处理基本上是同一个问题。这个问题的框架稍微有点模糊。ferent(范围主要是0..N而不是N..M,并且需要前导零,但当然不需要重复前导零)。为什么
字符数[10];
?数字可以有任何长度。为什么
计数
的类型是
字符
,而不是
整数
?您的解决方案方案让您困惑不解。您再次调用
strlen
,只要调用一次就足够了。