uva 10050 Hartals

算法描述:开辟一个日期数组,清空为0,以1来标记当天已经有活动,不用再添加,每次从0变为1就计数一次。另外做一个预处理,将所有的周五和周六标记为1,但不能计数,没得到一个h,就调用函数在日期数组中搜索判断。判断所有h的倍数,如果为0,则计数并变为1

#include <stdio.h>
#include <string.h>
#define MAX 3660
bool date[MAX];
int count,N;

void manage()
{
    int i;
    memset( date , 0 , sizeof(date) );
    for(i=7; i<=N+1; i+=7)  date[i]=date[i-1]=1;  //一定要N+1,不懂的话,想想N=12和N=13
}
void find(int h)
{ int i; for(i=h; i<=N; i+=h) if(!date[i]) { count++; date[i]=1;}  }
int main()
{
    int T,P,h,i;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&N); manage(); 
        scanf("%d",&P);
        for(count=0,i=1; i<=P; i++)
        {  scanf("%d",&h);  find(h); }
        printf("%d\n",count);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/scau20110726/p/2712608.html