本文主要是介绍刷题日记——礼炮车(厦门大学机试),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例题——礼炮车
方法一:按照开炮时间对时间间隔取余
第一炮设置都是第0秒打响,那么:
- 间隔为5的炮车打响第n炮,应该在(n-1)*5秒
- 间隔为6的炮车打响第n炮,应该在(n-1)*6秒
- 间隔为7的炮车打响第n炮,应该在(n-1)*7秒
代码:
#include <cstdio>
#include <map>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;int main(){int counts = 1;int times = 21;int a,b,c;for(int i=5;i<=(times-1)*7;i++){a = (int)(i%5==0);b = (int)(i%6==0);c = (int)(i%7==0);if(a==1&&i<=(times-1)*5||b==1&&i<=(times-1)*6||c==1){counts++;}//printf("%d\t%d\t%d\t%d\t%d\n",i,a,b,c,counts);}printf("%d",counts);return 0;
}
方法二:使用set去重
时间从0开始,每次加上相应时间间隔,将时间入set,最后,set的size即为炮响次数
- 间隔为5的炮车每次+5
- 间隔为6的炮车每次+6
- 间隔为7的炮车每次+7
set类型介绍
在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。
详细请参考:【C++中set用法详解】
代码
#include <cstdio>
#include <map>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
using namespace std;int main(){int times = 21;int a=0,b=0,c=0;set<int> st;while(0!=--times){a += 5;b += 6;c += 7;st.insert(a);st.insert(b);st.insert(c);}printf("%d",st.size()+1);return 0;
}
这篇关于刷题日记——礼炮车(厦门大学机试)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!