今天遇到有关排列的问题
引起了我的思考,题目主要是要找到最大最小值,一般遇到这种问题首先会是这种思路:(以三个数值中选出最大值为例,以下同)
int a,b;
scanf("%d%d",&a,&b);
if(a>b){
printf("%d",a);
}
else
printf("%d",b);
即一个一个比较,但运算步骤多,如果优化一下便是:
int a,b,c,max;
max=0;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
printf("%d",max=a);
}
else
printf("%d",max=b);
if(max>c)
{
printf("%d",max=max);
}
else
printf("%d",max=c);
即设置一个储存max的变量,每次比较将大的那个数储存到此变量,从而简便运算。
但是此运算思路中人工操作太多,数值数一大,也不好计算,所以加入以下结构:
for(i=1,i>=5,i++){
}
即循环五(也可为任意符合范围的正整数)次的语句,在将原代码修改便可达成目的。但即可表排列也可表判断,但若题目中有一限制输入数的条件又好像可以利用了:(此处使用判断,未用排列,方便写代码)
输入数范围在0到100间,且只有最大值大于50
思路为:
int a,max;
max=0;
for(i=1,i>=5,i++){
scanf("%d",&a);
printf("%d",a-50);
if(a>0){
printf("%d",a);
}
else
printf(“No”);
}
即可判断是否为输入数最大值,可见题目的条件会影响排列题目的解法,而一个解法又可能有其他奇特思路简化,从而产生多样的代码,可见代码世界的宏大。