大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入刷题模式。若有错误,请多多指教。
1.题目:
一个两位正整数;将个位与十位对调,得到另一个两位正整数,我们称这两个正整数互为对调数。现给定一个两位正整数,问是否能找到另一个对调后不同的两位正整数,使得这两个正整数之和等于他们对调后的数之和?例如:56+54=65+45。编写程序为输入一个两位正整数找到满足如上要求的数或输出“不存在”。
2.主要程序代码如下:
最好先自己敲一遍哦!毕竟自己的亲身经历印象更深刻!
#include<stdio.h>
#include<stdlib.h>
int s(int n) //判断是否为对调数,是返回对调数,否结束程序。
{
if (n <= 10 || n >= 100 || n % 10 == 0) //思考1:为什么加n%10==0。
{
printf("data error\n");
exit(0); //结束程序。
}
else
return n % 10 * 10 + n / 10; //数字分离。
}
int main()
{
int n1 = 0, i = 0, j = 0, n2 = 0,i2=0;
printf("please input an integer:\n");
scanf("%d", &n1);
n2 = s(n1);
for (i = 11; i < 100; i++)
{
if (i % 10 == 0) //去掉不是对调数是个位的数。思考2: 为什么不直接带入s函数?
continue;
else
{
i2 = s(i);
if (n1 + i == n2 + i2 && n1 != i2) //注:判断相等是==不是=。思考3: 为什么要加 n1!=i2 。
{
printf("%d+%d=%d+%d\n", n1, i, n2, i2);
j++; //用于判断是否存在满足等式的值。
}
else
continue; //跳过本次循环。
}
}
if (j == 0)
printf("inexistence"); //输出不存在。
getch();
return 0;
}
3.运行
程序运行结果示例1:
程序运行结果示例2:
程序运行结果示例3:
4.思考
1)思考 1:当个位为零时,它的对调数为一位数,比如当输入为50时,它的对调数是5。不是两位数不符合题意。聪明的你有没有想到这一点呢?
2)思考2: 当i的个位为零时,比如20,它在子函数中会进入if()语句exit会结束整个程序。这明显不是我们想要的结果。如果是你,你会怎么处理这一问题呢?欢迎评论留言。
3)思考3:当n1==i2时,不防我们就举个例子。n1=51,n2=15,i=15,i2=51。这时就会有小伙伴问了这不满足条件吗?为什么要删除人家。
这像不像考试时候大意的我们?
5.总结
让我们复习一下用到的知识吧!
1)子函数的格式。
2)逻辑操作符 ||(或),想到&&了吗?
3)exit(0) 结束程序,头文件为stdlib.h。exit 和 return 的区别你懂吗?不懂快动动你的小手去查查吧!在评论区讨论起来吧!
4)数组分离
5)continue 跳过本次循环。那break呢?
认真做一道题你可以复习很多知识点。如果你觉得同学〖森〗写的内容对你有帮助的话就点赞收藏关注支持一下小主吧!本题你是不是有更简单的算法呢?那就在评论区留下你的痕迹吧!