题目1:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
思路:
- 首先根据题干思考三位数的实现方法,1,2,3,4四个数字代表了个位十位百位的四种可能性,我们选用三重循环来实现这种可能性。
- 其次互不相同且无重复就代表了个位十位百位各不相同。
- 根据以上分析变成需要围绕个位十位百位来展开,那么设三个整型变量来表示个位十位百位。
- 同时考虑输出结果,多少个和都是多少那么就是输出总个数(通过num计数得出)以及三位数的每一位是哪个数字。
代码:
#include"stdio.h"
int main()
{
int a,b,c;
int num=0;
for(a=1;a<=4;a++)
{
for(b=1;b<=4;b++)
{
for(c=1;c<=4;c++)
{
if(a!=b&&b!=c&&c!=a)
{
num++;
printf("%d,%d,%d\n",a,b,c);
}
}
}
}
printf("能组成%d个互不相同且无重复的三位数",num);
return 0;
}
结果:
题目2:
企业发放的奖金根据利润提成。
- 利润(I)低于或等于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%提成。
从键盘输入当月利润I,求应发放奖金总数?
思路:
根据题干信息来考虑
- I<=10W,奖金=10%*I
- 10w<I<20w,奖金=1W+7.5%*(I-10w)
- 20w<=I<=40w,奖金=1.75w+5%(I-20w)
- 40w<I<=60w,奖金=2.75w+3%(I-40w)
- 60w<I<=100w,奖金=3.35w+1.5%(I-60w)
-
I>100w,奖金=3.95w+1%(I-100w)
-
双精度浮点型输出%lf是L和F的小写。
代码:
#include"stdio.h"
/*方法一
int main()
{
double bonus,i;
scanf("%lf",&i);
if(i<=100000)
{
bonus=0.1*i;
}
else if(i<=200000)
{
bonus=10000+0.075*(i-100000);
}
else if(i<=400000)
{
bonus=17500+0.05*(i-200000);
}
else if(i<=600000)
{
bonus=27500+0.03*(i-400000);
}
else if(i<=1000000)
{
bonus=33500+0.015*(i-600000);
}
else if(i>1000000)
{
bonus=39500+0.01*(i-1000000);
}
printf("%lf",bonus);
}
*/
//方法二
int main()
{
double i,bonus;
scanf("%lf",&i);
int s=i/100000;
switch(s)
{
case 0:
bonus=0.1*i;
break;
case 1:
bonus=10000+0.075*(i-100000);
break;
case 2:
case 3:
bonus=17500+0.05*(i-200000);
break;
case 4:
case 5:
bonus=27500+0.03*(i-400000);
break;
case 6:
case 7:
case 8:
case 9:
bonus=33500+0.015*(i-600000);
break;
default:
bonus=39500+0.01*(i-1000000);
break;
}
printf("%lf",bonus);
}
结果:
题目3:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
思路:
- 设数x
- 根据题目得出公式x+100=a^2,x+168=b^2;
- b^2-a^2=168,(b+a)(b-a)=168,
- 设b+a=y,b-a=z,则y和z必有一个偶数
- 又因为b=(y+z)/2,a=(y-z)/2,则b和a必同奇同偶;
- 综上a和b是两个偶数,且a*b=168;
代码:
#include"stdio.h"
int main()
{
int x,a,b,y,z;
for(y=2;y<168/2+1;y++)
{
if(168%y==0)
{
z=168/y;
if(y>z&&(y+z)%2==0&&(y-z)%2==0)
{
b=(y+z)/2;
a=(y-z)/2;
x=a*a-100;
printf("%d\t",x);
}
}
}
}
结果:
题目4:
输入某年某月某日,判断这一天是这一年的第几天?
思路:
- 运用switch判断计算出除了天数之外的天数总和;
- 判断闰年平年,闰年即在输出时加1天。
- 最后加上几号就可以计算出是这一年的第几天。
代码:
#include"stdio.h"
int main()
{
int year,month,day,sum;
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{
case 1:
sum=0;
break;
case 2:
sum=31;
break;
case 3:
sum=59;
break;
case 4:
sum=90;
break;
case 5:
sum=120;
break;
case 6:
sum=151;
break;
case 7:
sum=181;
break;
case 8:
sum=212;
break;
case 9:
sum=243;
break;
case 10:
sum=273;
break;
case 11:
sum=304;
break;
case 12:
sum=334;
break;
default:
printf("Error");
break;
}
if(year%400==0||year%4==0&&year%100!=0)
printf("%d",sum+day+1);
else
printf("%d",sum+day);
}
结果:
题目5:
输入三个整数x,y,z,请把这三个数由小到大输出。
思路:
- 将x与另外两数比较,如果x比较大就进行交换,最终x应为三个数中最小的。
- 将y与z进行比较,如果y比较大,就进行交换。
- 最终x,y,z就是从小到大的顺序。
代码:
#include"stdio.h"
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("%d\t%d\t%d",a,b,c);
}