特殊数字类编程题

奇数

奇数:输出 1-1000 之间所有的奇数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
方法1
int main()
{
int i;
for (i = 1; i <= 1000; i++)
{
if (i % 2 == 1)
{
printf("%d\t", i);
}
}

return 0;
}

方法2
int main()
{
int i;
for (i = 1; i <= 1000; i += 2)
{
printf("%d\t", i);
}

return 0;
}

偶数

偶数:输出 1-1000 之间所有的偶数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
方法1
int main()
{
int i;
for (i = 1; i <= 1000; i++)
{
if (i % 2 == 0)
{
printf("%d\t", i);
}
}

return 0;
}

素数

素数:输出 1-1000 之间所有的素数。

素数:除了 1 和它本身以外,不能被任何整数整除的数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
int i, j;
for (i = 1; i <= 1000; i++)
{
for (j = 2; j < i; j++) // j < i / 2 或者 j < (int)sqrt((double)i)都可
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
printf("%d\t", i);
}
}

return 0;
}

完全数

完全数:输出 1-1000 之间所有的完数。

完全数:它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
int i, j;
int sum;
for (i = 1; i < 1000; i++)
{
sum = 0;
for (j = 1; j < i; j++)
{
if (i % j == 0)
{
sum = sum + j;
}
}
if (sum == i)
{
printf("%d\t", i);
}
}

return 0;
}

回文数

回文数:输出 100-999 之间所有的回文数。

回文数:一个数字从左边读和从右边读的结果是一模一样的,例如:121

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
方法1
int main()
{
int i;
int g, s, b;
for (i = 100; i <= 999; i++)
{
g = i % 10;
s = i / 10 % 10;
b = i / 100;
if (g * 100 + s * 10 + b == i)
{
printf("%d\t", i);
}
}

return 0;
}

方法2
int main()
{
int i;
int g, b;
for (i = 100; i < 1000; i++)
{
g = i % 10;
b = i / 100;
if (g == b)
{
printf("%d\t", i);
}
}

return 0;
}

⭐判断一个数不是不是回文数【不限范围】:
int main()
{
int num = 0;
scanf("%d", &num);
int res = 0;
int i = num;
while (i)
{
res = res * 10 + i % 10;
i = i / 10;
}
if (res == num)
{
printf("%d 是回文数", num);
}
else
{
printf("%d 不是回文数", num);
}

return 0;
}

水仙花数

水仙花数:输出 100-999 之间所有的水仙花数。

水仙花数:一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
int i;
int g, s, b;
for (i = 100; i < 1000; i++)
{
g = i % 10;
s = i / 10 % 10;
b = i / 100;
if (g * g * g + s * s * s + b * b * b == i)
{
printf("%d\t", i);
}
}

return 0;
}

中位数

中位数:找出一组数据中的中位数

思路:先把数据排序。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那 2 个数据的算术平均值就是这群数据的中位数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main()
{
int arr[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int sz = sizeof(arr) / sizeof(arr[0]);
int i, j;
// 冒泡排序
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
if (sz % 2 == 1)
{
printf("%d 是中位数", arr[sz / 2]);
}
else
{
printf("%.2f 是中位数", (arr[sz / 2] + arr[sz / 2 - 1]) / 2.0);
}

return 0;
}

完全平方数

完全平方数:若一个数能表示成某个数的平方的形式,则称这个数为完全平方数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
判断是否为完全平方数:
int main()
{
int num = 0;
scanf("%d", &num);
int i;
int flat = 0;
for (i = 1; i < (int)sqrt((double)num); i++)
{
if (i * i == num)
{
flat = 1;
break;
}
}
if (flat)
{
printf("%d是完全数", num);
}
else
{
printf("%d不是完全数", num);
}

return 0;
}

输出指定范围的完全平方数:
int main()
{
int i, j;
for (i = 1; i < 100; i++)
{
for (j = 1; j <= (int)sqrt((double)i); j++)
{
if (j * j == i)
{
printf("%d\t", i);
}
}
}

return 0;
}

随机数

随机数:生成 10 个 1(含 1)-100(含 100)之间的随机数。

不要忘了引入库 stdlib.htime.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
int i;
int res;
srand((unsigned)time(NULL)); // 播种
for (i = 0; i < 10; i++)
{
res = rand() % 100 + 1; // 生成随机数
printf("%d ", res);
}

return 0;
}

求年份

求年份:输出 2000(含 2000)-2020(含 2020)之间所有的闰年年份

普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004年、2020年 等就是闰年)。

世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900年 不是闰年,2000年 是闰年)。

闰年一年 366 天,二月有 28 天

1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
int i;
for (i = 2000; i <= 2020; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
{
printf("%d\t", i);
}
}

return 0;
}

最大公约数

最大公约数:两个或多个整数 共有 约数 中最大的一个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
暴力法:
int main()
{
int a = 12;
int b = 16;
int i;
if (a > b)
{
int tmp = a;
a = b;
b = tmp;
}
for (i = a; i > 0; i--)
{
if (a % i == 0 && b % i == 0)
{
printf("%d 和 %d 最大公约数是 %d", a, b, i);
break;
}
}

return 0;
}

辗转相除法:
int main()
{
int a = 12;
int b = 16;
int c;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d", b);

return 0;
}

辗转相减法:【大数减小数,直至相等】
// 16 - 12 = 4
// 12 - 4 = 8
// 8 - 4 = 4
// 4 - 4 = 0
int main()
{
int a = 12;
int b = 16;
int c = 0;
while (a != b)
{
if (a < b)
{
int temp = a;
a = b;
b = temp;
}
c = a - b;
a = b;
b = c;
}

printf("%d", a);
return 0;
}

最小公倍数

最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 最小公倍数 = 两数乘积 / 最大公因数
int main()
{
int a = 12;
int b = 16;
int c;
int res = a * b;
while (c = a % b)
{
a = b;
b = c;
}
res = res / b;
printf("%d", res);
return 0;
}

求数字

  • 求数字:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
int i = 0;
int x, y;
for (i = 0; i < 1000; i++)
{
x = sqrt(i + 100);
y = sqrt(i + 168);
if (x * x == (i + 100) && y * y == (i + 168))
{
printf("%d", i);
break;
}
}

return 0;
}
  • 求数字:求所有的四位数中,原数的 9 倍与其逆序相等的数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
int i = 0;
int g, s, b, q;
for (i = 1000; i <= 9999; i++)
{
g = i % 10;
s = i / 10 % 10;
b = i / 100 % 10;
q = i / 1000;
if (i * 9 == (g * 1000 + s * 100 + b * 10 + q))
{
printf("%d", i);
}
}

return 0;
}
  • 求数字:求 1(含 1)-200(含 200)中,能同时被 2、5 除余 1 的整数。
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
for (int i = 1; i <= 200; i++)
{
if (i % 2 == 1 && i % 5 == 1)
{
printf("%d ", i);
}
}

return 0;
}

求位数

求位数:输入一个正整数,输出它是几位数?

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
int a = 999;
int i = 0;
for (i = 0; a; i++)
{
a = a / 10;
}
printf("%d", i);

return 0;
}

翻转数字

翻转数字

1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
int a = 123;
int res = 0;
while (a)
{
res = res * 10 + a % 10;
a = a / 10;
}
printf("%d", res);

return 0;
}