AtCoder Beginner Contest 096

atcode 的beginner的比赛都是蛮简单的,所以这场打起来还是比较容易

第一题就是一道简单的签到题吧 就是如果月份大于等于日期,就输出月份,如果日期大于月份,就输出月份减一

第二题就有点难受,wa了一发,也不知道为什么,反正就是找最大值然后一直乘2就行了,最后求和

第三题 一开始想的是dfs找联通块,但是发现只要简化一下就行了,就是看每个块的上下左右四个方向是否还有其他的块,如果没有就no,遍历完了,就输出yes

第四题倒是卡了很久,题意是给你一个数字n,让你找到一个n长度的素数序列,然后让整个素数序列的任意五个素数的和为合数

,主要是一开始没有思路,用那啥rand随机了几次,都wa了,感觉应该答案不会是那么简单,然后同伴提醒素数可以简化成2*x+3,然后任意五个数相加就可以写出15+一个数(设为t),如果这个和要为合数,那么就是t要能被3.5.15中任意一个整除

到这里,就有了思路,就是先打个素数表(题目要求是55555以内的素数),然后每个素数-3,如果减3之后,能被3.5.15中任意一个整除,就把这个素数放入一个新表中,然后就保证了这个表内任意五个数的和都是合数,然后输入n之后,就按顺序输出这个表里的元素就可以了。

    前三题就不贴代码,第四题贴个代码,写的也比较丑

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <time.h>
  6. using namespace std;
  7. int su(int n){
  8. for(int i=2;i<=sqrt(n);i++)
  9. if(n%i==0) return 0;
  10. return 1;
  11. }
  12. int main()
  13. {
  14. srand((int)time(0));
  15. int num[55555];
  16. for(int i=1;i<=55555;i++) num[i]=i;
  17. num[1]=0;
  18. for(int i=2;i<=55555;i++)
  19. if(num[i]!=0){
  20. for(int k=2;k*i<=55555;k++) num[k*i]=0;
  21. }
  22. int n,t=0;
  23. int s[1000];
  24. for(int i=0;i<=55555;i++)
  25. if(num[i]!=0) s[t++]=num[i]-3;
  26. int q=0;
  27. int w[55];
  28. for(int i=0;i<t;i++){
  29. if(s[i]%3==0||s[i]%5==0||s[i]%15==0) w[q++]=s[i]+3;
  30. }
  31. cin>>n;
  32. for(int i=0;i<n;i++)
  33. cout<<w[i]<<' ';
  34. return 0;
  35. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值