鱼C论坛

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

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

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

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

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

x
  1. #include <stdio.h>

  2. void division ( int * , int , int ) ;
  3. int cir ( int * ) ;
  4. _Bool judge ( int * , int , int ) ;

  5. int main ( void )
  6. {
  7.         int i = 7 , j , max = 0 , temp , result ;
  8.         int a [ 10000 ] = { 0 } ;
  9.        
  10.         while ( i <= 1000 )
  11.         {
  12.                 for ( j = 0 ; j < 10000 ; j ++ )
  13.                 {
  14.                         a [ j ] = 0 ;
  15.                 }
  16.                        
  17.                 division ( a , i , 1 ) ;
  18.                
  19.                 temp = cir ( a ) ;
  20.                
  21.                 if ( temp > max )
  22.                 {
  23.                         result = i ;
  24.                         max = temp ;
  25.                 }
  26.                
  27.                 i ++ ;
  28.                 printf ( "%d" , i ) ;
  29.         }
  30.        
  31.         printf ( "%d\n" , result ) ;
  32.        
  33. /*        division ( a , 45 , 1 ) ;
  34.        
  35.         printf ( "%d\n" , cir ( a ) ) ;*/
  36.        
  37.         return 0 ;
  38. }

  39. void division ( int *a , int i , int j )//将一个数除数存进A数组
  40. {
  41.         int count = 0 ;
  42.        
  43.         while ( count <= 10000 )
  44.         {
  45.                 while ( j < i )
  46.                 {
  47.                         j *= 10 ;
  48.                         count ++ ;
  49.                 }
  50.                
  51.                 if ( !( j % i ) )
  52.                 {
  53.                         a [ count ] = j / i ;
  54.                         break ;
  55.                 }
  56.                 else
  57.                 {
  58.                         a [ count ] = j / i ;
  59.                         j = j % i ;
  60.                 }
  61.         }
  62. }

  63. int cir ( int *a )//返回循环数
  64. {
  65.         int i = 1 , j = 2 , k , temp ;
  66.         _Bool flag = 0 ;
  67.        
  68.         k = 9999 ;
  69.        
  70.         while ( a [ k ] == 0 )
  71.         {
  72.                 k -- ;
  73.         }
  74.        
  75.         if ( k < 9000 )
  76.         {
  77.                 return 0 ;
  78.         }
  79.        
  80.         while ( 1 )
  81.         {       
  82.                 while ( a [ i ] != a [ j ] )
  83.                 {
  84.                         j ++ ;
  85.                
  86.                         if ( j == 9999 && a [ i ] != a [ j ] )
  87.                         {
  88.                                 i ++ ;
  89.                                 flag = 1 ;
  90.                                 j = i + 1 ;
  91.                                
  92.                                 break ;
  93.                         }
  94.                 }
  95.                
  96.                 if ( flag )
  97.                 {
  98.                         flag = 0 ;
  99.                        
  100.                         continue ;
  101.                 }
  102.                
  103.                 k = j - i ;
  104.                
  105.                 if ( judge ( a , k , i ) )
  106.                 {
  107.                         break ;
  108.                 }
  109.                 else
  110.                 {
  111.                         j ++ ;
  112.                         continue ;
  113.                 }
  114.         }

  115.        
  116.         return k ;
  117. }

  118. _Bool judge ( int *a , int k , int i )//判断是不是这个循环
  119. {
  120.         int j , b = i , count = 0 ;
  121.        
  122.         while ( count < 10 )
  123.         {
  124.                 j = b + k ;
  125.                
  126.                 if ( a [ b ] != a [ j ] )
  127.                 {
  128.                         return 0 ;
  129.                 }
  130.                
  131.                 b ++ ;
  132.                 count ++ ;
  133.         }
  134.        
  135.         return 1 ;
  136. }
复制代码

这是我写的代码,但是不知道为什么总是会运行出错,找了好久没找到错误,求大神告知一下我这段代码到底出错在哪里了,谢谢
最佳答案
2017-3-21 16:33:21
自由深渊 发表于 2017-3-21 16:14
这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错

无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-21 12:18:00 | 显示全部楼层
有没有大神呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 12:20:23 | 显示全部楼层
程序是调试出来的
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

什么意思呀?我这个代码不知道为什么运行到一半会奔溃,不明原因,明明各个函数单独运行都没错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

无标题.png
小甲鱼最新课程 -> https://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个还是可能不同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

额,这就尴尬了
小甲鱼最新课程 -> https://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 } ; //函数里有个地方会超出数组范围改 ...

内个,算法是错的,指的是哪个函数呀,能不能告诉一下呀
小甲鱼最新课程 -> https://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函数

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

不用vs2015吗?
vs2015很好啊
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

甲鱼推荐的是DEV-C啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不管用哪一个,一定要学会调试程序,因为程序是调试出来的
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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