| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1544 人关注过本帖
标题:找倍数问题,。算法好像有点不足。网上提交无法通过。求指点改进。
只看楼主 加入收藏
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 10楼 daniel_
每个数都有的。。网上有证明过的。不过有的最小倍数数值小。有的大。。
2012-12-10 14:09
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
收藏
得分:0 
回复 11楼 萝莉小纯情
你确定?

我找到的最小的 99没有
--
我再调一下程序看下
2012-12-10 14:15
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
/************************************************************************/
/* 对于任意给定的整数n,存在最小的由0和1构成的10进制整数是它的倍数。求N */
/************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char chars[100];
void change(int n, int *a)
{    //将整数 n转换为二进制字符串
    if (0 == n)
    {
        *a = 0;
        return;
    }
    change(n / 2, a);
    chars[(*a)++] = n % 2 + '0';
    chars[*a] = '\0';
}
int judge(char *a, int n)
{    //将 2字符串转为整数,并判断是否n的倍数,否返回整数
    int num = atoi(a);
    if (num % n)    return 0;
    else    return num;
}
int main()
{
    int i;
    int n;
    int N;
    scanf("%d", &n);
    for (int j = 1;;j++)
    {
        change(j, &i);
        if (N = judge(chars, n))
        {
            printf("%ld\n", N);
            break;
        }
    }
    return 0;
}


[ 本帖最后由 azzbcc 于 2012-12-10 14:25 编辑 ]


[fly]存在即是合理[/fly]
2012-12-10 14:23
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 13楼 azzbcc
还是不对。比如输入99或者144的时候就错了。。
2012-12-10 14:43
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 12楼 daniel_
额。都存在的。我提交上去。发现有些输出是负值。而输出的正数答案都是对的。。标准输出都是正的。。就是不知道怎么存储更大的数。。
2012-12-10 14:49
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
额,考点是数据太大,汗


[fly]存在即是合理[/fly]
2012-12-10 14:52
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
char *judge(char *a, int n)
{
    int num = 1;
    for (char *p = a + 1;*p != '\0';p++)
    {
        num *= 10 % n;
        num %= n;
        num += (*p - '0') % n;
    }
    if (num % n)    return 0;
    else    return a;
}


[fly]存在即是合理[/fly]
2012-12-10 14:53
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 17楼 azzbcc
汗!是不是我手机编译器的问题,现在输出全是10432......
2012-12-10 15:09
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
收藏
得分:0 
回复 18楼 萝莉小纯情
嗯 54也出问题了

有时候出现的是正数,但不是有1,0组成的
--
你确定每个正数都有这个最小的倍数么?

54应该是多少?
99 应该是多少?
144应该是多少?
2012-12-10 15:14
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
手机编译,汗!

我把主函数也改了。
程序代码:
/************************************************************************/
/* 对于任意给定的整数n,存在最小的由0和1构成的10进制整数是它的倍数。求N */
/************************************************************************/
#include <stdio.h>
char chars[100];
void change(int n, int *a)
{    //将整数 n转换为二进制字符串
    if (0 == n)
    {
        *a = 0;
        return;
    }
    change(n / 2, a);
    chars[(*a)++] = n % 2 + '0';
    chars[*a] = '\0';
}
char *judge(char *a, int n)
{
    int num = 1;
    for (char *p = a + 1;*p != '\0';p++)
    {
        num *= 10 % n;
        num %= n;
        num += (*p - '0') % n;
    }
    if (num % n)    return 0;
    else    return a;
}
int main()
{
    int i;
    int n;
    scanf("%d", &n);
    for (int j = 1;;j++)
    {
        change(j, &i);
        if (judge(chars, n))
        {
            printf("%s\n", chars);
            break;
        }
    }
    return 0;
}


[fly]存在即是合理[/fly]
2012-12-10 15:16
快速回复:找倍数问题,。算法好像有点不足。网上提交无法通过。求指点改进。
数据加载中...
 
   



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

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