C语言实现:找四位反序数与对称数问题

需积分: 6 0 下载量 137 浏览量 更新于2024-07-20 收藏 147KB DOC 举报
这篇资源主要包含了两个C语言编程题目,分别是求解四位数的反序数问题和寻找汽车里程表上对称数的问题。 对于第一个问题,“21.4位反序数”,题目要求找到一个四位数N,它的9倍等于其反序数。通过分析,我们可以设置N的四位数分别为i、j、k、l(0到9之间),然后建立等式(i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i)。为了找到这样的数,可以使用穷举法遍历所有可能的四位数,用C语言实现如下: ```c #include<stdio.h> int main() { int i; for (i = 1002; i < 1111; i++) { // 穷举四位数可能的值 if (i % 10 * 1000 + i / 10 % 10 * 100 + i / 100 % 10 * 10 + i / 1000 == i * 9) { // 判断反序数是否是原整数的9倍 printf("The number satisfied stats condition is: %d\n", i); } } } ``` 运行这段代码,结果会输出满足条件的四位数1089。 第二个问题是“求车速”。给定一个对称数(例如95859),两小时后里程表上的新对称数需满足同样条件。我们可以设新对称数为i,初始值为95860,然后递增i并检查是否对称。如果找到满足条件的对称数,就输出该数及车速。C语言实现如下: ```c #include<stdio.h> int main() { int t, a[5]; // 数组a存放分解的数字位 long int k, i; for (i = 95860;; i++) { // 以95860为初值,循环试探 for (t = 0, k = 100000; k >= 10; t++) { // 从高到低分解所取i值的每位数 a[t] = (i % k) / (k / 10); // 字,依次存放于a[0]~a[5]中 k /= 10; } if ((a[0] == a[4]) && (a[1] == a[3])) { printf("The new symmetrical number kilometers is: %d%d%d%d%d\n", a[0], a[1], a[2], a[3], a[4]); printf("The velocity"); // 这里计算车速的部分缺失,假设车辆行驶了x公里,时间是2小时,则速度为x/2 km/h // 需要根据实际距离计算速度 break; } } } ``` 这个程序会找到新的对称数,并输出,但计算车速的部分未给出,需要补充计算实际行驶的距离才能得出车速。 这两个问题都涉及到基本的数学逻辑和C语言编程技巧,包括循环、条件判断、数组操作等。解决这些问题有助于提升编程思维和算法理解能力。