结构体6

作者: 时间:2020-07-09 点击数:

int countrs(stu tt[],int n)
   {
       int i,j,rs=0,cnt;   //rs统计人数,cnt统计每个人不及格的门数
    for(i=0;i<n;i++)
    {
       //统计该生有多少门课不及格
    cnt=0;
       for(j=0;j<3;j++)
      if (tt[i].score[j]<60) cnt++;
    if (cnt>=2) rs++;
    }
    return rs;
   }
int main()
{
stu st[4]={"zhangsan",1001,56,75,59,0,"lisi",1002,77,88,99,0,"wangwu",1003,66,89,95,0,"maliu",1004,44,56,78,0};
int n;
n=countrs(st,4);
printf("%d\n",n);
    return 0;
}

问题:13个学生(姓名,成绩)围成一圈,从第一个人开始报数,1,2,3,4,...凡报到n的人出圈,
,下一个人继续从1开始报数,还是报到n的人出圈,重复上述步骤,找出最后留在圈中的学生。
初始数据:{"zhang",77,1,"wang",65,1,"li",73,1,"zhao",89,1,"zhu",92,1,"sun",58,1,"tan",87,1,"tao",78,1,"han",69,1,"huang",84,1,"liu",81,1,"zheng",72,1,"chen",93,1};
分析:
   struct person
{
   char name[20];
   int score;
   int flag;
};
typedef struct person per;
per st[13]={"zhang",77,1,"wang",65,1,"li",73,1,"zhao",89,1,"zhu",92,1,"sun",58,1,"tan",87,1,"tao",78,1,"han",69,1,"huang",84,1,"liu",81,1,"zheng",72,1,"chen",93,1};
设计一个函数(找出最后留在圈中的学生)
per count(per tt[],int n,int k)  //n表示长度,k表示出圈号
{
    遍历所有人(环形)
 {
     判断当前人出圈了没有?如没有出圈,则报数计数器加1
  判断报数计数器的值到出圈号?如到了,则{当前人出圈;报数计数器清0;出圈人数加1}
  出圈人数到了12个人?  如到了,则遍历结束。
  当前人是否为最后一个人?如是,则直接设置下一个报数的人为第一个人
 }
 遍历所有人,找到flag值为1的学生
 返回该学生
}
per count(per tt[],int n,int k)  //n表示长度,k表示出圈号
{
   int i,sum=0,cnt=0;
   for(i=0;i<n;i++)
   {
      if (tt[i].flag==1) cnt++;
   if (cnt==k)
      {tt[i].flag=0;cnt=0;sum++;}
   if (sum==12) break;
   if (i==12) i=-1;    //i=0;
   }
   for(i=0;i<13;i++)
     if (tt[i].flag) break;
   return tt[i];
}

*/
#include <stdio.h>
struct person
{
   char name[20];
   int score;
   int flag;
};
typedef struct person per;
per count(per tt[],int n,int k)  //n表示长度,k表示出圈号
{
   int i,sum=0,cnt=0;
   for(i=0;i<n;i++)
   {
      if (tt[i].flag==1) cnt++;
   if (cnt==k)
      {tt[i].flag=0;cnt=0;sum++;}
   if (sum==12) break;
   if (i==12) i=-1;    //i=0;
   }
   for(i=0;i<13;i++)
     if (tt[i].flag) break;
   return tt[i];
}
int main()
{
per st[13]={"zhang",77,1,"wang",65,1,"li",73,1,"zhao",89,1,"zhu",92,1,"sun",58,1,"tan",87,1,"tao",78,1,"han",69,1,"huang",84,1,"liu",81,1,"zheng",72,1,"chen",93,1};
per t;
int k;
scanf("%d",&k);
t=count(st,13,k);
printf("%s,%d\n",t.name,t.score);
return 0;
}
拓展1:求m个人,报到n的人出圈,求最后留在圈中的人。
拓展2:求m个人,报到n的人出圈,求最后能留在圈中的3个人。

上一页 [1] [2] [3]

Copyright© 2020 Anyang Institute of Technology.All rights reserved.

学院地址:河南省安阳市黄河大道西段