题目:个位数为6且能被3整除的五位数共有多少?
#include <stdio.h>
int main()
{
int i;
int count = 0; //计数
for(i = 1000; i <= 9999; i++)
if(!(( i * 10 + 6) % 3) ) //判断所选的数能否被3整除
count++;
printf("count = %d\n", count);
return 0;
}
说明:满足条件的五位数的选择范围是10006、10016、...、99996。可设基础数i=1000,通过计算i*10+6即可得到欲选的数(i的变化范围是1000~9999),再判断该数能否被3整除。
思考题:求100到1000之间有多少个其数字之和为5的整数。
//思考题:求100到1000之间有多少个其数字之和为5的整数。
#include <stdio.h>
int main()
{
int i, j, k;
int count = 0;
for(i = 1; i <= 5; i++)
for(j = 0; j <= 5; j++)
for(k = 0; k <= 5; k++)
{
if( i + j + k == 5)
count++;
}
printf("count = %d\n",count);
return 0;
}
题目:一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余 4,所得的商被17除余15,最后得到一个商是a的2 倍。求这个自然数。
据题意,可设最后的商为i(i从1开始取值),用逆推法可以列出关系式:
(((i*8+7)*8)+1)*8+1=((2*i*17)+15)*18+4
再用试探法求出商i的值。
代码如下:
#include <stdio.h>
int main()
{
int x;
for(x = 1; ; x++) // 使探商的值
{
if((( x * 8 + 7) * 8 + 1) * 8 + 1 == (( 2 * x * 17) + 15) * 17 + 4 )
{
printf("The required number is:%d\n",(( x * 8 + 7) * 8 + 1));
break; //找到之后,退出循环。
}
}
return 0;
}
再用试探法求出商i的值。
题目:一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。
据题意可知,七进制和九进制表示的这个自然数的每一位一定小于7,可设其七进制数形式为kji,(i、i、k的取值分别为1~6),然后设其九进制表示形式为ijk。
代码如下:
#include <stdio.h>
int main()
{
int i,j,k;
//使用穷举法
for( i = 1; i < 7; i++) //穷举9进制的第一位数字
for( j = 0; j < 7; j++) //穷举9进制的第二位数字
for( k = 1; k < 7; k++) //穷举9进制的第三位数字
if(i * 9 * 9 + j * 9 + k == i + j * 7 + k * 7 * 7)
{
printf("The special number with 3 digits is:");
printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k,j,i,i,j,k,i*9*9+j*9+k);
}
return 0;
}
第二种方法:
#include <stdio.h>
int main()
{
int num,n1;
int i, s;
for(num = 100; num < 1000; num++)
{
n1 = num; s = 0;
while(n1)
{
i = n1 % 7;
s = s * 9 + i;
n1 /= 7;
}
if (num == s)
printf("%d\n",s);
}
return 0;
}
题目:设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。
#include <stdio.h>
int main(void)
{
int i;
for(i = 1000; i <= 1111; i++) //穷举4位数可能的值
{
if( i%10*1000 + i/10%10*100 + i/100%10*10 +i/1000 == i*9) //判断反序数是否是原整数的9倍
printf("The number:%d\n",i);
}
return 0;
}
第二种方法:
#include <stdio.h>
int main()
{
int i,j,k,n;
for(i = 1; i <= 9; i++)
for(j = 0; j <= 9; j++)
for(k = 0; k <= 9; k++)
for(n = 1; n <= 9; n++)
{
int n1 = i * 1000 + j * 100 + k * 10 + n;
if ( 9 * n1 == n * 1000 + k * 100 + j * 10 + i)
printf("%d", n1);
}
return 0;
}