| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1544 人关注过本帖
标题:找倍数问题,。算法好像有点不足。网上提交无法通过。求指点改进。
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
上面有一句错了,a是不知道的,但他除n的余数是num,所以直接用num代替a%n


[fly]存在即是合理[/fly]
2012-12-11 00:58
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
发多了,删除之。。。

手机码字伤不起。

[ 本帖最后由 azzbcc 于 2012-12-11 01:12 编辑 ]


[fly]存在即是合理[/fly]
2012-12-11 00:58
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 32楼 azzbcc
嗯。我理解了。。
2012-12-11 08:43
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 32楼 azzbcc
对了。大哥。我又有个问题。如果我想在主函数中建立个二维数组来储存那些字符串我该如何做呢。我是这样想的char a[10000][100];
for ( j = 1;j<10000;j++)
 {
        change(j, &i);
        a[j-1]=chars;
 }
可是这样构造编译错误。。。。。

我的题目要求是输入若干数,遇到0终止。我就想构造那么一个数组。
在对于输入的每个整数遍历数组找到那个数。。
2012-12-11 14:44
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 34楼 萝莉小纯情
唔,数组和数组是不能直接赋值的,只能一个个来,所以代码肯定不对。

另外你初始化10000组有点太多了,效率会降低很多。

而且,空间也可能不够。


[fly]存在即是合理[/fly]
2012-12-11 14:50
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 35楼 azzbcc
那该如何操作。。那就设置1000组就好了。。有人跟我说了个多重指针的,。好像这样子倒是没编译错误、可我还是整不出来。。
char **a=NULL;
   scanf("%d", &n);
    for ( j = 1;j<10000;j++)
    {
        change(j, &i);
        *(a+(j-1))=chars;
    }
2012-12-11 14:54
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
void change(char *chars, int n, int *a)
{    //将整数 n转换为二进制字符串,存入chars中
    if (0 == n)
    {
        *a = 0;
        return;
    }
    change(chars, n / 2, a);
    chars[(*a)++] = n % 2 + '0';
    chars[*a] = '\0';
}
int main()
{
    char chars[1000][100];
    int i;
    for (int j = 1;j < 1000;j++)
        change(chars[j], j, &i);
    return 0;
}


[fly]存在即是合理[/fly]
2012-12-11 15:07
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
又错了,初学者的悲哀,1000转成2进制只有10位,远小于100

可以定义为chars[1000][11]但是99之类的数所求结果超过10位,所以1000组不够,增加的话,又要考虑空间

我的建议是定义两组chars[1000][11]和temp[100],当在chars中找不到时,再从1000开始重新生成temp字符串,用temp计算


[fly]存在即是合理[/fly]
2012-12-11 15:24
萝莉小纯情
Rank: 1
等 级:新手上路
帖 子:73
专家分:6
注 册:2012-12-8
收藏
得分:0 
回复 37楼 azzbcc
#include <stdio.h>

void change(char *chars, int n, int *a)
{
    if (n==0)
    {
        *a = 0;
        return;
    }
    change(chars, n / 2, a);
    chars[(*a)++] = n % 2 + '0';
    chars[*a] = '\0';
}

char *judge(char *a, int n)
{
    char *p;
    int num = 1;
    for ( 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,j,n;
    char chars[10000][100];
    for ( j = 1;j < 10000;j++)
        change(chars[j-1], j, &i);
     for (;;)
     {
         scanf ("%d",&n);
         if (n==0)
         break;
         else
         for (j=0;;j++)
         {
             if (judge(chars[j],n))
             {
                 printf ("%s\n",chars [j]);
                 break;
             }
         }
     }
    return 0;
}
很奇怪。输入99的时候。。窗口蹦的一声出错了- -!!其他都还行。
2012-12-11 15:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,楼主现在到底AC了没有?

挺有意思的问题。顺便问一下n的范围是多少?

重剑无锋,大巧不工
2012-12-11 15:28
快速回复:找倍数问题,。算法好像有点不足。网上提交无法通过。求指点改进。
数据加载中...
 
   



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

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