C语言——day6

一.题目

输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

二.正确答案

#include<stdio.h>
main()
{
	int a, b,c,tmp;
	scanf("%d", &a);
	b = 0;
	c = a;
	while (a!=0)
	{
		tmp = a % 10;
		b = b * 10 + tmp;
		a = a / 10;
		
	}
	if (c==b)
	{
		printf("yes\n");
	}
	else {
		printf("no\n");
	}
    return 0;

}

三.我当时是怎么错的

1.用几个词或者短句描述自己的思维过程

我的思考是:先算出输入的数字是几位数。然后利用相同数量的10去除以输入值,把输入的值拆分成1位数。之后思维就不知道干什么了

2.我有没有基础知识点、公式上的错误

对if()中3个表达式不太理解,while懂但写代码写不规范。

3.对照正确答案,我卡在哪一步了

b = b * 10 + tmp;

如何使对称的数字可以进行对比以确认相等

4.卡住的这一步是哪里出了问题

4.1陌生的解题技巧没见过

4.2已有的解题技巧没想到(模式识别)

1.为什么我没有做出来?

我绞尽脑汁也没想到怎么做到,之前想通过将数字字符串化来一个个索引对比等式,但不清楚C语言有没有Python相关的功能,最终放弃了。

2.我的方法为什么不行,哪一步走不下去了?

在取出输入值的不同位数后不知道如何把它们串联起来,想过组成字符串索引,但觉得应该有更简单的方法,但想不出来。

3.换个角度的话能不能利用现有条件做下去?

可以。我的答案和最终答案只差了关键部分,如果利用好取余数的特征是可以做出来的。

3.1如果不行的话是什么限制了它?
4.原答案是如何想到下面的思路的?我哪一步想差了?
  • 原答案的原理是取余数一定会一个个从后往前地取出输入值的位数,因此对称数可以反其道而行之,将个位数变成最高位值,其它不同位数也相互替换,最终和保存的原输入值对比后相同,程序结束。
  • 我没有想到余数的这一特征,而且对称数取余也具有迷惑性,我搞不清楚,余数是前面的还是后面的,也许如果我当时使用非对称数来输入,也许情况会不同。
4.1由哪个或者哪些条件导致了这个解题步骤的出现?

对称数

5.这种条件可以用到哪些地方? 有没有题和它类似,可以形成一种题型?

5.需不需要用到其他思维方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值