关于欧拉计划26题
#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 12:20
程序是调试出来的
^_^
什么意思呀?我这个代码不知道为什么运行到一半会奔溃,不明原因,明明各个函数单独运行都没错 人造人 发表于 2017-3-21 12:20
程序是调试出来的
^_^
这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错 自由深渊 发表于 2017-3-21 16:14
这个代码还是我调试了很多次才写成这样的,就是不知道为什么崩溃,明明看着没错
本帖最后由 fc1735 于 2017-3-21 18:18 编辑
if ( j >= 9999 && a [ i ] != a [ j ] )
int a [ 12000 ] = { 0 } ; //函数里有个地方会超出数组范围改到后面的值,懒得修改,所以初始化为12000
算法是错的,只是刚好答案对了,10个小数都相同,第11个还是可能不同 人造人 发表于 2017-3-21 16:33
额,这就尴尬了{:10_282:} fc1735 发表于 2017-3-21 17:15
if ( j >= 9999 && a [ i ] != a [ j ] )
int a [ 12000 ] = { 0 } ; //函数里有个地方会超出数组范围改 ...
内个,算法是错的,指的是哪个函数呀,能不能告诉一下呀 本帖最后由 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函数
人造人 发表于 2017-3-21 16:33
感谢,自己改了之后总算可以正常运行了,不太会用调试这个功能,我用的DEV-C++,不知道怎么让循环体里面的数字快速循环,自己一下下点NEXTLINE又很累 自由深渊 发表于 2017-3-21 22:12
感谢,自己改了之后总算可以正常运行了,不太会用调试这个功能,我用的DEV-C++,不知道怎么让循环体里面 ...
不用vs2015吗?
vs2015很好啊
^_^ 人造人 发表于 2017-3-21 22:23
不用vs2015吗?
vs2015很好啊
^_^
甲鱼推荐的是DEV-C啊
自由深渊 发表于 2017-3-22 10:31
甲鱼推荐的是DEV-C啊
不管用哪一个,一定要学会调试程序,因为程序是调试出来的
^_^
页:
[1]