解题思路:

本题总共有6种情况,分别是:


1. 利润低于或等于100000元时


       即i<=100000


2. 利润高于100000元,低于或等于200000元时


       即100000<i≤200000


3. 利润高于200000元,低于或等于400000元时


       即200000<i≤400000


4. 利润高于400000元,低于或等于600000元时


       即400000<i≤600000


5. 利润高于600000元,低于或等于1000000元时


       即600000<i≤1000000


6. 利润高于1000000元时


       即i>1000000



注意事项:

分清情况,注意代码的整洁性,还有就是公式别用错。因为这个题解运用了定义整型常量的方法,所以省去了冗杂的0的书写,使代码变得整洁、简便地同时,缩短了代码的编译时间。


参考代码:

#include "stdio.h"
int main()
{
	int i,r;
	const int B=100000;
	scanf("%d",&i);
	if(i<=B)//利润低于或等于100000元时
	{
		r=i*0.1;
	}
		else if(i>B && i<=(2*B))     //利润高于100000元,低于或等于200000元时
		{
			r=0.1*B+(i-B)*0.075;
		}
			else if(i>(2*B) && i<=(4*B))     //利润高于200000元,低于或等于400000元时
			{
				r=0.1*B+0.075*B+(i-2*B)*0.05;
			}
				else if(i>(4*B) && i<=(6*B))     //利润高于400000元,低于或等于600000元时
				{
					r=0.1*B+0.075*B+0.05*2*B+(i-4*B)*0.03;
				}
					else if(i>(6*B) && i<=(10*B))     //利润高于600000元,低于或等于1000000元时
					{
						r=0.1*B+0.075*B+0.05*2*B+0.03*2*B+(i-6*B)*0.015;
					}
						else if(i>(10*B))     //利润高于1000000元时
						{
							r=0.1*B+0.075*B+0.05*2*B+0.03*2*B+4*B*0.015+((i-10*B)*0.01);
						}
						printf("%d",r);
	return 0;
}


点赞(0)
 

0.0分

53 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 23 条评论

芷镜 1年前 回复TA
#include<stdio.h>
int main()
{
	int I,a,b,c,d,e,f,X=100000,x,y;
	scanf("%d",&I);
#define	F(x)((x)>X ? X:(x))
	a=F(I); b=F(I-X);
#define G(x)((x)>2*X ? 2*X:(x))
    c=G(I-2*X); d=G(I-4*X);
    e=(I-6*X>4*X) ? 4*X:I-6*X;
    f=I-10*X;
#define H(x)((x)>=0 ? (x):0)
    a=H(a);b=H(b);c=H(c);
    d=H(d);e=H(e);f=H(f);
    y=a*0.1f+b*0.075f+c*0.05f+d*0.03f+e*0.015f+f*0.01f;
    printf("%d",y);
    return 0;
}
李俊毅 1年前 回复TA
@勇敢冲 我的80.。。。代码:#include<stdio.h> int main() { 	int a,m; 	scanf("%d",&a); 	if(a<=100000) 	{ 		m=a*0.1; 	} 	if(a>100000&&a<=200000) 	{ 		m=100000*0.1+(a-100000)*0.075; 	} 	if(a>200000&&a<=400000) 	{ 		m=100000*0.1+100000*0.075+(a-200000)*0.05; 	} 	if(a>400000&&a<=600000) 	{ 		m=100000*0.1+100000*0.075+200000*0.05+(a-400000)*0.03; 	} 	if(a>600000&&a<=1000000) 	{ 		m= 100000*0.1+100000*0.075+200000*0.05+200000*0.03+(a-6000000)*0.015;  	} 	if(a>1000000) 	{ 		m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+600000*0.015+(a-1000000)*0.01;  	} 	printf("%d",m); 	return 0;  }
会说C语言的萝卜 1年前 回复TA
中间计算结果不用double,不会有误差吗?
勇敢冲 1年前 回复TA
第一次解出来题,开心。但是不知道为什么只有70分
    #include<stdio.h>
    int main()
    {   int x,y=0;
        scanf("%d",&x);
        int p[]={10000,17500,27500,33500,39500};
        if (x>1000000)
           y=(x-1000000)*0.01+p[4];
         else if (x>600000&&x<=1000000)
        y=(x-600000)*0.015+p[3];
          else if (x>400000&&x<=600000)
           y=(x-400000)*0.03+p[2];
         else if (x>200000&&x<=400000)
           y=(x-200000)*0.05+p[1];
          else if (x>100000&&x<=200000)
           y=(x-100000)*0.075+p[0];
         else if (x<100000&&x>0)
           y=x*0.01;
    printf("%d\n",y);
    return 0;
Travis 1年前 回复TA
1
Travis 1年前 回复TA
@老狗 1
夏予夏至 1年前 回复TA
#include<stdio.h>
int main()
{
	int a,b,c,d,e;
	a=100000;
	b=200000;
	c=400000;
	d=600000;
	e=1000000;
	int n,profit;
	scanf("%d",&n);
	int grade;
	//找出所在的区间 
	if(n>e)
	{
		profit=a/10+(b-a)/1000*75+(c-b)/20+(d-c)/100*3+(e-d)*15/1000+(n-e)/100;
		goto tiaochu;
	}
		if(n>d)
	{
		profit=a/10+(b-a)/1000*75+(c-b)/20+(d-c)/100*3+(n-d)/1000*15;
		goto tiaochu;
	}
		if(n>c)
	{
		profit=a/10+(b-a)/1000*75+(c-b)/20+(n-c)/100*3;
		goto tiaochu;
	}
		if(n>b)
	{
		profit=a/10+(b-a)/1000*75+(n-b)/20;
		goto tiaochu;
	}
		if(n>a)
	{
		profit=a/10+(n-a)*75/1000;
		goto tiaochu;
	}
		if(n<=a)
	{
		profit=n/10
心束负 1年前 回复TA
不是错在多个0,就是少个0上,真服了
#include<stdio.h>
int main()
{
	int lr;
	scanf("%d",&lr);
	int tmp=lr;
	if(tmp<=100000)
	tmp*=0.1;
	else if(tmp>100000 && tmp<=200000)
	tmp=0.1*100000+(tmp-100000)*0.075;
	else if(tmp>200000 && tmp<=400000)
	tmp=0.1*100000+0.075*100000+(tmp-200000)*0.05;
	else if(tmp>400000 && tmp<=600000)
	tmp=0.1*100000+0.075*100000+0.05*200000+(tmp-400000)*0.03; 
	else if(tmp>1000000)
	tmp=0.1*100000+0.075*100000+0.05*200000+0.03*200000+0.015*400000+(tmp-1000000)*0.01;
	else
		tmp=0.1*100000+0.075*100000+0.05*200000+0.03*200000+(tmp-600000)*0.015;
	printf("%d",tmp);
	return 0;
}
老狗 1年前 回复TA
@老狗 #include<stdio.h> int main() {     int a,m;     scanf("%d",&a);     switch(a/100000)     {         case 0:         a=a*0.1;break;        //利润I低于或等于100000元的,奖金可提10%;          case 1:         a=(a-100000)*0.075+100000*0.1;break;         /*利润高于100000元,低于或等于200000元(100000<I≤200000)时,         低于等于100000元部分按10%提成,高于100000元的部分,可提成 7.5%;*/         case 2:         case 3:         a=100000*0.075+100000*0.1+(a-200000)*0.05;break;         /*200000<I≤400000时         低于200000元部分仍按上述办法提成(下同),高于200000元的部分按5%提成*/         case 4:         case 5:         a=100000*0.075+100000*0.1+200000*0.05+(a-400000)*0.03;break;         //400000<I≤600000元时,高于400000元的部分按3%提成;         case 6:         case 7:         case 8:         case 9:         a=100000*0.075+100000*0.1+200000*0.08+(a-600000)*0.015;break;         //600000<I≤1000000时,高于600000元的部分按1.5%提成;         default:         a=100000*0.075+100000*0.1+200000*0.08+400000*0.015+(a-1000000)*0.01;break;         //I>1000000时,超过1000000元的部分按1%提成     }     printf("%d",a);     return 0; }
老狗 1年前 回复TA
#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    switch(a/100000)
    {
        case 0:
        case 1:
        printf("%d",a=a*0.1);break;
        case 2:
        printf("%d",a=a*0.175);break;
        case 3:
        case 4:
        printf("%d",a=a*0.175+200000*0.05);break;
        case 5:
        case 6:
        printf("%d",a=a*0.175+200000*0.08);break;
        case 7:
        case 8:
        case 9:
        case 10:
        printf("%d",a=a*0.175+200000*0.08+400000*0.015);break;
        default:
        printf("%d",a=a*0.175+200000*0.08+400000*0.015+(a-1000000)*0.01);break;