公主睡前数龙, 每隔k, l, m, n只都会用不同的技能攻击龙. 假定共数了d只龙, 问共有多少龙被攻击了.
思路: 用一个visit数组记录被攻击过的dragon, 最后遍历visit数组统计被攻击过的龙即可.
1 #define MAXN 100005 2 using namespace std; 3 4 int visited[MAXN]; // index from 1 5 6 void attack(int c, int d) 7 { 8 int f = d/c; 9 for(int i = 1; i <= f; i++) 10 visited[c*i] = true; 11 } 12 13 int main() 14 { 15 int k, l, m, n, d, sum; 16 while(~scanf("%d%d%d%d%d", &k, &l, &m, &n, &d)) 17 { 18 // init 19 sum = 0; 20 memset(visited, 0, sizeof(int)*MAXN); 21 // attack 22 attack(k, d); 23 attack(l, d); 24 attack(m, d); 25 attack(n, d); 26 // count attacked dragon 27 for(int i = 1; i <= d; i++) 28 if(visited[i] == 1) 29 sum++; 30 printf("%d ", sum); 31 } 32 return 0; 33 }