1.有1、2、3、4 四个数字,能组成多少个互不相同且无重复的三位数?都是多少 ?
按照我的思路,我可能会正向思考先分别把1~4放在个位,然后分情况再分别往百位、十位上放不同的数。相当于我按照做数学排列组合的思维了。
比较简洁的思路如下:
(1)把所有的数列出来
(2)分别判断是否满足“无重复”这个条件(个位!=十位!=百位 i!=j&&i!=k&&j!=k)
(3)同时使用计数器count,并且输出满足条件的值
#include<stdio.h>
int main(){
int i,j,k;//分别代表 个、十、百
int count=0;//计数
for(i=1;i<5;i++){
for(j=1;j<5;j++){
for(k=1;k<5;k++){
if(i!=j&&i!=k&&j!=k){
printf("%d%d%d\n",i,j,k);
count++;
}
}
}
}
printf("能组成%d个互不相同且无重复的三位数",count);
return 0;
}
2.企业发放的奖金根据利润提成。利润"W"低于或等于10万元时,奖金可提10%;利润高于10万元低于20万元时,低于10万元的部分按 10%提成,高于10万元的部分,可提成7.5%;20万到 40 万之间时,高于20万元的部分,可提成 5%;40 万到 60 万之间时高于 40 万元的部分,可提成 3%;60 万到 100 万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过 100万元的部分按 1%提成,从键盘输入当月利润 W,求应发放奖金总数?
我的思路:
S1:输入 W
S2:判断W的值【if(W<=10) ...else if(10<W<=20)...】
S3:按照题目要求对输入的W分别计算各部分利润再加起来(这样计算会比较繁琐)S3:按照数轴层次来(分为0~10,10~20,20~40,40~60,60~100,>100 六个区间)
#include<stdio.h>//按照原来的思路,分每一次的情况计算需要重复一段,但总体思路差不多
int main(){
double W,S;
scanf("%lf",&W);
if(W<=10) S=W*0.1;
else if(10<W<=20) S=10*0.1+(W-10)*0.075;
else if(20<W<=40) S=10*0.1+10*0.075+(W-20)*0.05;
else if(40<W<=60) S=10*0.1+10*0.075+20*0.05+(W-40)*0.03;
else if(60<W<=100)S=10*0.1+10*0.075+20*0.05+20*0.03+(W-60)*0.015;
else if(W>100) S=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(W-100)*0.001;
printf("%lf",S);
return 0;
}
#include<stdio.h>
int main(){
double W,S;//W是利润,S是应发放的奖金
scanf("%lf",&W);
double b1,b2,b3,b4,b5;
b1=10*0.1;//10万的部分
b2=b1+10*0.075;//10万~20万
b3=b2+20*0.05;//20~40
b4=b3+ 20*0.03;
b5=b4+40*0.015;
if(W<=10) S=W*0.1;
else if(10<W<=20) S=b1+(W-10)*0.075;
else if(20<W<=40) S=b2+(W-20)*0.05;
else if(40<W<=60) S=b3+(W-40)*0.03;
else if(60<W<=100) S=b4+(W-60)*0.015;
else if(W>100) S=b5+(W-100)*0.01;
printf("%lf",S);
return 0;
}