C语言经典算法100例1-5
本文所列程序题目来自网上资源,代码实现完全由本人所写,如有问题还请各位博友指出
部分代码在题目基础上有所提升
1.有1、2、3、4个数字,能组成多少个互不相同且重复数字的三位数?都是多少?
实现代码
#include<stdio.h>
int main(void)
{
int a, b, c, count = 0;
for(a = 1; a < 5; a++)
{
for(b = 1; b < 5; b++)
for(c = 1; c < 5; c++)
{
if(c == b || c == a || a == b)
continue;
else
printf("%-4d", a*100 + b*10 +c);
count++;
}
printf("\n");
}
printf("count = %d\n", count);
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,求应发放奖金总数?
#include <stdio.h>
int main(void)
{
long int m,a,b,c,d,e;
double oa,ob,oc,od,oe;
a = 100000;
b = 200000;
c = 400000;
d = 600000;
e = 1000000;
oa = a*0.1;
ob = oa + (b-a)*0.075;
oc = ob + (c-b)*0.05;
od = oc + (d-c)*0.03;
oe = od + (e-d)*0.015;
printf("请输入利润:");
scanf("%ld", &m);
if(m>0 && m<=a)
printf("奖金为:%.3lf\n",(double)m*0.1);
else if(m<=b)
printf("奖金为:%.3lf\n", (m - a) * 0.075 + oa);
else if(m<=c)
printf("奖金为:%.3lf\n", (m - b) * 0.05 + ob);
else if(m<=d)
printf("奖金为:%.3lf\n", (m - c) * 0.03 + oc);
else if(m<=e)
printf("奖金为:%.3lf\n", (m - d) * 0.015 + od);
else if(m>e)
printf("奖金为:%.3lf\n", (m - e) * 0.01 + oe);
else
printf("输入不合法,请重新输入利润:");
return 0;
}
3.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
double a;
for(i = 0; i <= 1000000; i++)
{
a= sqrt(i + 100);
if(a== (int)a)
{
a= sqrt(i + 268);
if( a == (int)a )
printf("%d\n", i);
}
}
return 0;
}
4.输入某年某月某日,判断这一天是这一年的第几天?
#include <stdio.h>
int sum(int m);
int check(int m, int d, int sign);
int main(void)
{
int i, y, m, d, sign = 0;
puts("请输入年月日,以空格分隔");
scanf("%d %d %d", &y, &m, &d);
while(1) // 实现循环输入
{
if((y%4 == 0 && y%100 != 0) || y%400 == 0)
sign = 1;
else
sign = 0;
i = check(m, d, sign);
if(i == 0)
printf("输入合法\n");
else
printf("输入不合法\n");
if(!i)
{
if(!sign)
printf("%d\n", sum(m) + d);
else if(sign)
printf("%d\n", sum(m) + d + 1);
}
else
puts("请重新输入年月日,以空格分隔");
puts("请输入年月日,以空格分隔");
scanf("%d %d %d", &y, &m, &d);
}
return 0;
}
// 检查输入的月份,以及合法月份对应的天数
int check(int m, int d, int sign)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(d > 31 || d < 1)
return 1;
else
return 0;
case 4:
case 6:
case 9:
case 11:
if(d > 30 || d < 1)
return 1;
else
return 0;
case 2:
if(sign == 1 && d > 29)
return 1;
else if(sign == 0 && d > 28)
return 1;
else
return 0;
default:
return 1;
}
return -1;
}
// 求这一年的第几天
int sum(int m)
{
switch(m)
{
case 1:
return 0;
case 2:
return 31;
case 3:
return 59;
case 4:
return 90;
case 5:
return 120;
case 6:
return 151;
case 7:
return 181;
case 8:
return 212;
case 9:
return 243;
case 10:
return 273;
case 11:
return 304;
case 12:
return 334;
}
return -366;
}
5.输入三个整数x,y,z,请把这三个数由小到大输出。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 5 // 定义生成的随机数个数,即比较个数
int main()
{
int a[MAX], i, j, n = 0;
int temp;
srand((unsigned)time(NULL)); // 产生随机数种子
for(i = 0; i < MAX; i++)
{
a[i] = rand()%100 + 1;
printf("%3d", a[i]);
}
printf("\n");
for(i = 0; i < MAX; i++)
for(j = i + 1; j< MAX; j++)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
for(i = 0; i < MAX; i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}