鱼C论坛

 找回密码
 立即注册
查看: 2134|回复: 13

[已解决]关于欧拉计划26题

[复制链接]
发表于 2017-3-20 21:41:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void division ( int * , int , int ) ;
int cir ( int * ) ;
_Bool judge ( int * , int , int ) ;

int main ( void )
{
        int i = 7 , j , max = 0 , temp , result ; 
        int a [ 10000 ] = { 0 } ;
        
        while ( i <= 1000 )
        {
                for ( j = 0 ; j < 10000 ; j ++ )
                {
                        a [ j ] = 0 ;
                }
                        
                division ( a , i , 1 ) ;
                
                temp = cir ( a ) ;
                
                if ( temp > max )
                {
                        result = i ;
                        max = temp ;
                }
                
                i ++ ;
                printf ( "%d" , i ) ;
        }
        
        printf ( "%d\n" , result ) ;
        
/*        division ( a , 45 , 1 ) ;
        
        printf ( "%d\n" , cir ( a ) ) ;*/
        
        return 0 ;
} 

void division ( int *a , int i , int j )//将一个数除数存进A数组 
{
        int count = 0 ;
        
        while ( count <= 10000 )
        {
                while ( j < i )
                {
                        j *= 10 ;
                        count ++ ;
                }
                
                if ( !( j % i ) )
                {
                        a [ count ] = j / i ;
                        break ;
                }
                else
                {
                        a [ count ] = j / i ;
                        j = j % i ;
                }
        }
}

int cir ( int *a )//返回循环数 
{
        int i = 1 , j = 2 , k , temp ;
        _Bool flag = 0 ;
        
        k = 9999 ;
        
        while ( a [ k ] == 0 )
        {
                k -- ;
        }
        
        if ( k < 9000 )
        {
                return 0 ;
        }
        
        while ( 1 )
        {        
                while ( a [ i ] != a [ j ] )
                {
                        j ++ ;
                
                        if ( j == 9999 && a [ i ] != a [ j ] )
                        {
                                i ++ ;
                                flag = 1 ;
                                j = i + 1 ;
                                
                                break ;
                        }
                }
                
                if ( flag )
                {
                        flag = 0 ;
                        
                        continue ;
                }
                
                k = j - i ; 
                
                if ( judge ( a , k , i ) )
                {
                        break ;
                }
                else
                {
                        j ++ ;
                        continue ;
                }
        }

        
        return k ;
}

_Bool judge ( int *a , int k , int i )//判断是不是这个循环 
{
        int j , b = i , count = 0 ;
        
        while ( count < 10 )
        {
                j = b + k ;
                
                if ( a [ b ] != a [ j ] )
                {
                        return 0 ;
                }
                
                b ++ ;
                count ++ ;
        }
        
        return 1 ;
} 
这是我写的代码,但是不知道为什么总是会运行出错,找了好久没找到错误,求大神告知一下我这段代码到底出错在哪里了,谢谢
最佳答案
2017-3-21 16:33:21
自由深渊 发表于 2017-3-21 16:14
这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错

无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-21 12:18:00 | 显示全部楼层
有没有大神呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 12:20:23 | 显示全部楼层
程序是调试出来的
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 14:55:23 | 显示全部楼层
人造人 发表于 2017-3-21 12:20
程序是调试出来的
^_^

什么意思呀?我这个代码不知道为什么运行到一半会奔溃,不明原因,明明各个函数单独运行都没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 16:14:51 | 显示全部楼层
人造人 发表于 2017-3-21 12:20
程序是调试出来的
^_^

这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 16:33:21 | 显示全部楼层    本楼为最佳答案   
自由深渊 发表于 2017-3-21 16:14
这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错

无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 17:15:01 | 显示全部楼层
本帖最后由 fc1735 于 2017-3-21 18:18 编辑

if ( j >= 9999 && a [ i ] != a [ j ] )

int a [ 12000 ] = { 0 } ; //函数里有个地方会超出数组范围改到后面的值,懒得修改,所以初始化为12000


算法是错的,只是刚好答案对了,10个小数都相同,第11个还是可能不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 20:51:20 | 显示全部楼层

额,这就尴尬了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 20:55:02 | 显示全部楼层
fc1735 发表于 2017-3-21 17:15
if ( j >= 9999 && a [ i ] != a [ j ] )

int a [ 12000 ] = { 0 } ; //函数里有个地方会超出数组范围改 ...

内个,算法是错的,指的是哪个函数呀,能不能告诉一下呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 22:00:34 | 显示全部楼层
本帖最后由 fc1735 于 2017-3-21 22:07 编辑

if ( !( j % i ) )
                {
                        a [ count ] = j  ;
                        break ;
                }
                else
                {
                        a [ count ] = j ;
                        j = j % i ;
                }



while ( 1 )
        {        
                while (!a[ i ]){i++;j=i+1;}
                while ( a [ i ] != a [ j ] )




k = j - i ;
return k;
不需要judge函数

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 22:12:14 | 显示全部楼层

感谢,自己改了之后总算可以正常运行了,不太会用调试这个功能,我用的DEV-C++,不知道怎么让循环体里面的数字快速循环,自己一下下点NEXTLINE又很累
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 22:23:42 | 显示全部楼层
自由深渊 发表于 2017-3-21 22:12
感谢,自己改了之后总算可以正常运行了,不太会用调试这个功能,我用的DEV-C++,不知道怎么让循环体里面 ...

不用vs2015吗?
vs2015很好啊
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-22 10:31:40 | 显示全部楼层
人造人 发表于 2017-3-21 22:23
不用vs2015吗?
vs2015很好啊
^_^

甲鱼推荐的是DEV-C啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-22 12:20:36 | 显示全部楼层
自由深渊 发表于 2017-3-22 10:31
甲鱼推荐的是DEV-C啊

不管用哪一个,一定要学会调试程序,因为程序是调试出来的
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-26 00:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表