点名游戏:输入一个学生群体的总数N,学生学号从1开始到N编号,从1开始点名,点到3的倍数、5的倍数的时候,跳过该名学生,求点名的次数。输入:一个正整数 N.如:10 输出:一个正整数,点名次数,如:5

点名游戏:输入一个学生群体的总数N,学生学号从1开始到N编号,老师从1开始点名,点到3的倍数、5的倍数的时候,跳过该名学生,求点名的次数。输入:一个正整数 N.如:10
输出:一个正整数,点名次数,如:5

代码如下:


#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,i,k;
    long long t = 0;
    int cnt = 0;
    int *p;
    scanf("%d",&n);
    p = (int*)malloc(sizeof(int)*(n+1));
    for(i=1;i<=n;i++)
        p[i] = 1;
    
    k=n;
    while(k != 1)
    {
        for(i=1;i<=n;i++)
        {
            if(p[i] == 1)
            {
                t++;
                if(t%3==0 || t%5==0)
                {
                    p[i] = 0;
                    
                    k--;
                }
            }
            
        }
        cnt++;
    }
    printf("%d",cnt+1);
    free(p);p = 0;
    return 0;
}