MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1098
题目分析:
纯粹的数学题, 数学归纳法的 应用 , 最后 归纳得出 原题等价与 18 + k*a 是否能被65整除.
代码如下 :


/*
Mail to : miyubai@gamil.com
My Blog : www.baiyun.me
Link : http://www.cnblogs.com/MiYu || http://www.cppblog.com/MiYu
Author By : MiYu
Test : 1
Complier : g++ mingw32-3.4.2
Program : HDU_1098
Doc Name : Ignatius's puzzle
*/
// #pragma warning( disable:4789 )
#include < iostream >
#include < fstream >
#include < sstream >
#include < algorithm >
#include < string >
#include < set >
#include < map >
#include < utility >
#include < queue >
#include < stack >
#include < list >
#include < vector >
#include < cstdio >
#include < cstdlib >
#include < cstring >
#include < cmath >
#include < ctime >
using namespace std;
inline bool scan_d( int & num)
{
char in ; bool IsN = false ;
in = getchar();
if ( in == EOF) return false ;
while ( in != ' - ' && ( in < ' 0 ' || in > ' 9 ' )) in = getchar();
if ( in == ' - ' ){ IsN = true ;num = 0 ;}
else num = in - ' 0 ' ;
while ( in = getchar(), in >= ' 0 ' && in <= ' 9 ' ){
num *= 10 ,num += in - ' 0 ' ;
}
if (IsN) num =- num;
return true ;
}
int main ()
{
int N;
while ( scan_d ( N ) ) {
if ( N % 65 == 0 )
puts ( " no " );
else {
int i;
for ( i = 0 ; i < 65 ; ++ i ) {
if ( ( i * N + 18 ) % 65 == 0 ) {
printf ( " %d\n " , i );
break ;
}
}
if ( i == 65 ) puts ( " no " );
}
}
return 0 ;
}
Mail to : miyubai@gamil.com
My Blog : www.baiyun.me
Link : http://www.cnblogs.com/MiYu || http://www.cppblog.com/MiYu
Author By : MiYu
Test : 1
Complier : g++ mingw32-3.4.2
Program : HDU_1098
Doc Name : Ignatius's puzzle
*/
// #pragma warning( disable:4789 )
#include < iostream >
#include < fstream >
#include < sstream >
#include < algorithm >
#include < string >
#include < set >
#include < map >
#include < utility >
#include < queue >
#include < stack >
#include < list >
#include < vector >
#include < cstdio >
#include < cstdlib >
#include < cstring >
#include < cmath >
#include < ctime >
using namespace std;
inline bool scan_d( int & num)
{
char in ; bool IsN = false ;
in = getchar();
if ( in == EOF) return false ;
while ( in != ' - ' && ( in < ' 0 ' || in > ' 9 ' )) in = getchar();
if ( in == ' - ' ){ IsN = true ;num = 0 ;}
else num = in - ' 0 ' ;
while ( in = getchar(), in >= ' 0 ' && in <= ' 9 ' ){
num *= 10 ,num += in - ' 0 ' ;
}
if (IsN) num =- num;
return true ;
}
int main ()
{
int N;
while ( scan_d ( N ) ) {
if ( N % 65 == 0 )
puts ( " no " );
else {
int i;
for ( i = 0 ; i < 65 ; ++ i ) {
if ( ( i * N + 18 ) % 65 == 0 ) {
printf ( " %d\n " , i );
break ;
}
}
if ( i == 65 ) puts ( " no " );
}
}
return 0 ;
}