对调数问题(C语言经典范例)

大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入刷题模式。若有错误,请多多指教。

 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 errorn");

		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+%dn", 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呢?

认真做一道题你可以复习很多知识点。如果你觉得同学〖森〗写的内容对你有帮助的话就点赞收藏关注支持一下小主吧!本题你是不是有更简单的算法呢?那就在评论区留下你的痕迹吧!

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>