标题:求代码,感激不尽
只看楼主
bjjbcbk
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-11-19
结帖率:66.67%
 问题点数:0 回复次数:3 
求代码,感激不尽
搜索更多相关主题的帖子: 代码 感激不尽 
2018-03-29 09:53
螃蟹爱吃小鱼
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:51
专家分:145
注 册:2018-3-6
得分:0 
#include<stdio.h>
int f(int n)
{   
    int a,b,c,d;
    if(0<=n&&n<=9)
        return 0;
    else if(10<=n&&n<=99)
    {
        a=n/10;
        b=n%10;
        if(a*b==n)
            return 1;
        else
            return 0;
    }
    else if(100<=n&&n<=999)
    {
        a=n/100;
        b=(n/10)%10;
        c=(n%100)%10;
        if(a*(10*b+c)==n||a*(10*c+b)==n||b*(10*a+c)==n||b*(10*c+a)==n||c*(10*b+a)==n||c*(10*a+b)==n)
            return 1;
        else
            return 0;

    }
    else if(1000<=n&&n<=9999)
    {
        a=n/1000;
        b=(n/100)%10;
        c=((n/10)%100)%10;
        d=((n%1000)%100)%10;
        if(a*(100*b+10*c+d)==n||a*(100*b+10*d+c)==n||a*(100*c+10*b+d)==n||a*(100*c+10*d+b)==n||a*(100*d+10*b+c)==n||a*(100*d+10*c+b)==n||
            b*(100*a+10*c+d)==n||b*(100*a+10*d+c)==n||b*(100*c+10*a+d)==n||b*(100*c+10*d+a)==n||b*(100*d+10*a+c)==n||b*(100*d+10*c+a)==n||
            c*(100*b+10*a+d)==n||c*(100*b+10*d+a)==n||c*(100*a+10*b+d)==n||c*(100*a+10*d+b)==n||c*(100*d+10*b+a)==n||c*(100*d+10*a+b)==n||
            d*(100*b+10*c+a)==n||d*(100*b+10*a+c)==n||d*(100*c+10*b+a)==n||d*(100*c+10*a+b)==n||d*(100*a+10*b+c)==n||d*(100*a+10*c+b)==n)
            return 1;
        else
            return 0;

    }

}
void main()
{
    int m;
    for(int i = 0; i<10000; i++)
    {
        m=f(i);
        if(m==1)
            printf("%d\t",i);
        else
            continue;
    }
}
只写到10000以内,我是新手,算法不怎么好,比较繁琐。
2018-03-29 15:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
这题关键就是判断某个数除以n后剩下的数是否与删去该数的原数数字组成一样~
先要满足该数能被除尽,然后再看位数是否少1,(事实上可以选取比最高位要大的数进行试除)~

具体判断数字组成是否相等可以建立一个0-9的哈希表,快速统计该数每个数字出现的次数~

[此贴子已经被作者于2018-3-29 16:38编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-03-29 16:36
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int findi(char a[],char b[],char ch)
{
    int i,j;
    if(strlen(a)-strlen(b)!=1)
        return 0;
    for(i=0;i<(int)strlen(a);++i)
        if(a[i]==ch)
        {
            a[i]='a';
            break;
        }
    for(i=0;i<(int)strlen(b);++i)
        for(j=0;j<(int)strlen(a);++j)
            if(a[j]==b[i])
            {
                a[j]='a';
                break;
            }
    for(i=0;i<(int)strlen(a);++i)
        if(a[i]!='a')
            return 0;
    return 1;
}
int checki(int n)
{
    int i,n2;
    char str[8],str2[8];
    sprintf(str,"%d",n);
    for(i=0;i<(int)strlen(str);++i)
    {
        sprintf(str,"%d",n);
        if(str[i]=='0'||str[i]=='1'||n%(str[i]-48)!=0)
            continue;
        else
        {
            n2=n/(str[i]-48);
            sprintf(str2,"%d",n2);
            if(findi(str,str2,str[i]))
                return 1;                
        }
    }
    return 0;
}
int main(void)
{
    int i=126;
    for(;i<=1000000;++i)
        if(checki(i))
            printf("%d\n",i);
    return 0;
}
2018-03-29 21:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485635-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.549576 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved