C练习实例1-5题打卡

题目1:

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少

思路:

  1. 首先根据题干思考三位数的实现方法,1,2,3,4四个数字代表了个位十位百位的四种可能性,我们选用三重循环来实现这种可能性。
  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,求应发放奖金总数?

思路:

根据题干信息来考虑

  1. I<=10W,奖金=10%*I
  2. 10w<I<20w,奖金=1W+7.5%*(I-10w)
  3. 20w<=I<=40w,奖金=1.75w+5%(I-20w)
  4. 40w<I<=60w,奖金=2.75w+3%(I-40w)
  5. 60w<I<=100w,奖金=3.35w+1.5%(I-60w)
  6. I>100w,奖金=3.95w+1%(I-100w)

  7. 双精度浮点型输出%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又是一个完全平方数,请问该数是多少?

思路:

  1. 设数x
  2. 根据题目得出公式x+100=a^2,x+168=b^2;
  3. b^2-a^2=168,(b+a)(b-a)=168,
  4. 设b+a=y,b-a=z,则y和z必有一个偶数
  5. 又因为b=(y+z)/2,a=(y-z)/2,则b和a必同奇同偶;
  6. 综上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:

输入某年某月某日,判断这一天是这一年的第几天?

思路:

  1. 运用switch判断计算出除了天数之外的天数总和;
  2. 判断闰年平年,闰年即在输出时加1天。
  3. 最后加上几号就可以计算出是这一年的第几天。

代码:

#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,请把这三个数由小到大输出。

思路:

  1. 将x与另外两数比较,如果x比较大就进行交换,最终x应为三个数中最小的。
  2. 将y与z进行比较,如果y比较大,就进行交换。
  3. 最终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);
}

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值