C练习4.14

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

个人总结:三个数有4种选择,三次循环并设条件三个数不相等就行。

#include"stdio.h"

void main()
{
	int a, b, c;
	int n = 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){					
			    	printf("%d%d%d\n",a,b,c);
					n++;
				}
			}
	}
	printf("%d",n);

}



题目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,求应发放奖金总数?

个人总结:条件选择题目

#include"stdio.h"

void main()
{
	float x, pro;
    printf("please input the numble of momey(万元):");
	scanf("%f",&x);


	if(x >= 0 && x <= 10)
		pro = x*0.1;
	else if(x > 10 &&x <= 20)
		pro = 10*0.1 + (x - 10)*0.075;
	else if(x > 20 &&x <= 40)
		pro = 10*0.1 + 10*0.75 + (x - 20)*0.05;
	else if(x > 40 &&x <= 60)
		pro = 10*0.1 + 10*0.75 + 20*0.05 + (x - 40)*0.03;
	else if(x > 60 &&x <= 100)
		pro = 10*0.1 + 10*0.75 + 20*0.05 + 20*0.03 + (x - 60)*0.015;
	else if(x > 100)
		pro = 10*0.1 + 10*0.75 + 20*0.05 + 20*0.03 + 40*0.015 + (x - 100)*0.01;

	printf("profit(万元):%.4f\n", pro);


}

题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

#include"stdio.h"

void main()
{
	int i, j, k;
	for(i = 0; i <= 1000; i++)
		for(j = 10; j <= 1000; j++)
			for(k = 13; k <= 1000; k++)
				if((i+100) == (j*j) && (i+168) == (k*k)){
				printf("%d\n",i);
				break;
				}
}

// 算法思路正确: 在一定范围内穷举, 对每个数i进行测试,看是否满足条件,如满足,则为待寻找的数。
// 条件为:(i+100) 为一个完全平方数, (i+268)为一个完全平方数。
// 该条件有一个更简单的判断方法,如下:

//long x = sqrt(i+100);

//if(x*x == i+100) 则(i+100)为一个完全平方数。 

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

个人总结:个人推出来的,网上有种代码简短的答案。

#include"stdio.h"

int judge(int y);
int monthday(int m, int y);

void main()
{
	int year, month, day, d1, sum;

	printf("please input year,month,day:\n");
	scanf("%d%d%d", &year, &month, &day);
    d1 = monthday(month, year);
	sum = d1 + day;
	printf("%d\n", sum);


}

int judge(int y)
{
	if(y%4 == 0 && y%100 != 0)
		return 1;
	else
		return 0;
}

int monthday(int m, int y)
{
	int d1;

	if (judge(y)){
		switch(m-1)
		{
		case 0:d1 = 0;break; 
    	case 1:d1 = 31;break;	    	
    	case 2:d1 = 60;break;			
		case 3:d1 = 91;break;			
		case 4:d1 = 121;break;		
		case 5:d1 = 152;break;		
		case 6:d1 = 182;break;			
		case 7:d1 = 213;break;			
		case 8:d1 = 244;break;		
		case 9:d1 = 274;break;
		case 10:d1 = 305;break;
		case 11:d1 = 335;break;
		case 12:d1 = 366;break;
		}
	}

	else
	{
		switch(m-1)
		{
		case 0:d1 = 0;break; 
    	case 1:d1 = 31;break;	    	
    	case 2:d1 = 59;break;			
		case 3:d1 = 90;break;			
		case 4:d1 = 120;break;		
		case 5:d1 = 151;break;		
		case 6:d1 = 181;break;			
		case 7:d1 = 212;break;			
		case 8:d1 = 243;break;		
		case 9:d1 = 273;break;
		case 10:d1 = 304;break;
		case 11:d1 = 334;break;
		case 12:d1 = 365;break;
		}
	}

	return d1;
} 

题目5:输入三个整数x,y,z,请把这三个数由小到大输出。

#include"stdio.h"
void sort(int *a, int *b, int *c);

void main()
{
	int x, y, z;
	scanf("%d %d %d",&x, &y, &z);
	sort(&x, &y, &z);
	printf("%d %d %d",x, y, z);
}

void sort(int *a, int *b, int *c)
{
	int t;
	if(*a > *b){
		t = *a;
	    *a = *b;
		*b = t;
	}

	if(*b > *c){
		t = *b;
		*b = *c;
		*c = t;
	}

    if(*a > *b){
		t = *a;
	    *a = *b;
		*b = t;
	}
	return;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值