12.亮灯数量
描述:一条长廊里依次装有n(1<=n<=65535)盏灯,从头到尾编号1、2、3、……n-1、n。每盏灯由一个拉线开关控制。开始,电灯全部关着。有n个学生从长廊经过,第一个学生把号码凡是1的倍数的电灯的开关拉一下;第二个学生把号码凡是2的倍数的电灯开关拉一下;接着第三个学生把号码凡是3的倍数的电灯开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏灯亮着。注意:电灯数和学生数一致。
输入:电灯的数量。输出:亮着的电灯数量。 例如,输入:2 输出:1。输入:3 输出:3
#include<stdio.h>
int main(void)
{
int i,j,k,LigthsNumber,StudentsNumber,count_LightsOn=0;
int LightState[100]={0}; //初始化灯状态数组为0,表示为关
printf("Input the number of Lights:\n");
scanf("%d",LightsNumber);
StudentsNumber=LightsNumber;
for(i=1;i<=StudentsNumber;++i)
{
for(j=1;j<=LightsNumber;++j)
{
if(i%j==0) //如果学生编号是等编号整数倍
++LightState[j-1]; //对应编号的灯的状态+1,数组编号和灯编号差1
}
}
for(k=0;k<LightsNumber;++k)
{
if(LightState[k]%2==1) //如果是奇数,说明灯的状态为开,反之为关
++count_LightsOn;
}
printf("The number of Light On: %d",count_LightsOn);
return 0;
}
13. 及格线
描述:10个考生考完期末考试后,老师需要划出及格线,要求如下:
(1)及格线是10的倍数;
(2)保证至少60%的学生及格;
(3)如果所有的学生都高于60分,则及格线为60分
输入:10个整数,取值0-100。输出:输出及格线,10的倍数
#include<stdio.h>
int main(void)
{
int i,j,temp,qualified_line;
int score[10]={0}; //存放学生成绩数组,初始化为0
printf("Input 10 students' scores and use ',' to seperate.\n");
scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&score[0],&score[1],&score[2],&score[3],&score[4],&score[5],&score[6],&score[7],&score[8],&score[9]);
for(i=0;i<9;--i)
{
for(j=0;j<9-i;--j)
{
if(score[j]>score[j+1]) //冒泡升序排列
{
temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
}
if(score[0]>=60) //如果所有成绩大于60
qualified_line=60;
else
qualified_line=(score[4]/10)*10; //至少6人成绩比qualified_line大,保证及格率>60%
printf("The qualified score line: %d",qualified_line);
return 0;
}