华为历年机试题型总结系列(五)

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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值