蓝桥杯训练第一天

填坑(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
----蓝桥杯训练

发布了9 篇原创文章 · 获赞 3 · 访问量 850
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章