有了昨天的经验今天想去解决很多以前解决不了的,于是百度了下C经典题.
一个一个做.
1.马克思手稿中有一道趣味数学题:有30个人,其中有男人,女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人,女人和小孩各有几人?
void macs()
{
int sum = 50;
int man ;
int woman ;
int child ;
for ( man=1; man<29; man++)
{
for ( woman=1; woman<29; woman++)
{
for( child=1;child<29;child++)
{
if(((man*3)+(woman*2)+(child*1))==sum && (man + woman + child ==30))
printf("%d %d %d\n",man,woman,child);
}
}
}
}
我个人是这样写的,但是出来了好多种方案.也不知道是不是这样写的额.
2.打印个上下金字塔
void printGraph()
{
for(int i=1;i<=10;i++)
{
for(int j=i;j<10;j++)
{
printf(" ");
}
for(int j=1;j<i*2;j++)
{
printf("★");
}
printf("\n");
}
for(int i = 9; i>=1;i--)
{
for(int j =i;j<10;j++)
{
printf(" ");
}
for(int j =1; j<=2*i-1;j++)
{
printf("★");
}
printf("\n");
}
}
3.根据输入的高度打印圣诞树
void christmas_trees()
{
int heigh;
pus:
printf("请输入要打印圣诞树的高度:");
scanf("%d",&heigh);
if(heigh >= 40 || heigh <= 10)
{
goto pus;
}
int top = heigh/3;
int center = heigh/3+heigh/6;
int foot = heigh-center-top;
for(int i=0; i<top;i++)
{
for(int i=0;i<center-top;i++)
{
printf(" ");
}
for(int j=i;j<top;j++)
{
printf(" ");
}
for(int j=0;j<2*(i+1)-1;j++)
{
printf("★");
}
printf("\n");
}
for(int i=0;i<center;i++)
{
for(int j=i;j<center-1;j++)
{
printf(" ");
}
for(int j=0;j<3*(i+1)-i;j++)
{
printf("★");
}
printf("\n");
}
for(int i=0;i<foot;i++)
{
for(int j =0 ; j<center-2;j++)
{
printf(" ");
}
for(int j = 0; j<foot; j++)
{
printf("★");
}
printf("\n");
}
//printf("%d %d %d\n",top,center,foot);
}
4.键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。
void digit()
{
long int number;
int count = 0;
printf("请输入一个数字(不限位数):");
scanf("%ld",&number);
int num=0;
while(number>10)
{
num = number/10;
//printf("%d",num);
number = num;
count++;
}
printf("位数:%d",count+1);
}
5.青年歌手参加歌曲大奖赛,有10个评委打分,试编程求选手的平均得分(去掉一个最高分和一个最低分)。
void grade()
{
srand((unsigned)time(NULL));
float num[10];
float max =0 ;
float min =0 ;
float sum =0 ;
float avg =0 ;
for(int i=0;i<10;i++)
{
num[i] = rand()/((float)(RAND_MAX)/10);
max = min = num[0];
//rand()%(b-a)+a 求A-B之间的随机数
printf("评委[%d]打分:%.1f\t",(i+1),num[i]);
sum += num[i];
if(i==4)
{
printf("\n");
}
}
for(int i=1;i<10;i++)
{
max = max<num[i]?num[i]:max;
min = min>num[i]?num[i]:min;
}
avg = (sum - (max+min))/10;
printf("\n最高分:%.1f\t 最低分:%.1f",max,min);
printf("\n总分:%.1f",sum);
printf("\n去掉一个最高分和一个最低分后总分:%.1f",sum-(max+min));
printf("\n平均分:%.1f",avg);
}
就这些了,进度确实有点小.(因为昨晚跟朋友打了一晚上LOL)下午4点到的机房...