蓝桥杯训练第一天

填坑(1)关于C中的交换变量

例题1
输入一个三位数,分离出它的百位、十位和个位,反转后输出。
样例输入:
127
样例输出:
721

分析:首先将三位数读入变量n里,然后进行分离。
百位:n/100
十位:n/10%10
个位:n%10
解法:

#include<stdio.h>
int main()
{
int n,a,b,c,d;
scanf("%d",&n);
a=n/100;
b=n%10/10;
c=n%10;
d=a+b10+c100;
printf("%d",d);
return 0;
}

以上是一道简单的三位数交换位置的题,由此延伸变量交换的三种方法

例题2
输入两个整数变量a和b,交换二者的值,然后输出。
样例输入
824 16
样例输出
16 824

解法一:三变量法

#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
c=a;
a=b;
b=c;
printf("%d %d",a,b);
return 0;
}

这种方法简单的理解就是三个杯子,分别为水,可乐,空。之后通过空杯将水与可乐互换。
解法二:两变量法

#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d",a,b);
return 0;
}

举个例子说明,这种方法是将水和可乐混合,然后过滤分解到不同的杯子里。

注意!
两变量法看起来很好,实际很少用,因为它的适用范围很窄,只有定义了加减法的数据类型才能采用此方法。
三变量法已经很简单,适用范围广,推荐使用。
你以为三变量法是解决本题最简单的途径吗?恭喜你回答错了。
多数的算法竞赛采用黑盒测试,即只考察程序解决问题的能力,而不关心采用了什么方法。对于本题最佳程序如下

#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d\n",b,a);
return 0;
}

请记住我们的目标是解决问题,而不是为了写程序而写程序,不需要自己创造条件去展示编程技巧。
----2020.1.16
----蓝桥杯训练

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值