当前位置:  首页  >  服务器技术  >  Linux/unix  >  Linux入门

关于C程序算法的简化

关于C程序算法的简化--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
近一些天看了一些算法,发现用C写的基于类的几个算法比较不错:
高复杂度的程序千千万万,但低复杂度程序是有限的,且常常是唯一的。变高复杂度算法为低复杂度算法有几个途径:

1.变嵌套多重的条件句为一重循环句:

例:所得税问题
(y为所得税,x为月收入)。

[table=390][tr][td]
[/td][td] 0 ;x<=2000;[/td][/tr][tr][td] [/td][td] (x-2000)*3% ;2000100000;[/td][/tr][/table]

常规思路:
用一个嵌套多重的条件语句:
#include
mian()
{
flaot x,y;
scanf("%f",&x);
if(x<=2000)
y=0;
else
if(x<=5000)
y=(x-2000)*0.03;
else
if(x<=10000)
y=(x-5000)*0.05+90;
else
if(x<=100000)
y=(x-10000)*01+340;
else
y=(x-100000)*0.3+9340;
printf("%f",y);
}
这种程序比较好想,但不通用(所谓通用,就是指情况发生变化后只改变数据不改程序的程序)。
下面是一种比较通用的算法,大家可以比较一下:

#include "stdio.h"
#define N 4
void main()
{
float a[N+1]={0,2000,5000,10000,100000},
b[N+1]={0.0,0.01,0.05,0.1,0.3},
c[N]={0,90,340,9340};
float x,y;
int i;
printf("Please input your Wages:");

scanf("%f",&x);

/* 该段为我加上的,防输入格式出错
while(1)
{
if(x>=0)
break;
else
{
printf("ERROR!\nPlease input your Wages again:");
scanf("%f",&x);
}
}
*/
i=N;
while(x<=a)
i=i-1;
printf("%f %d",y,i);
y=(x-a)*b+c[i-1];

/*我更喜欢用for循环
for(i=N;x;i--);
y=(x-a)*b+c[i-1];
*/

printf("应交税为:%f",y);
}

这样即使需要改动数据,也无需改动程序,而且程序的复杂度大大降低了。
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有