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个人。