对调数问题(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 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呢?

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

 

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学〖森〗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值