当前位置: 首页 > news >正文

网站建设青雀哈尔滨的网站设计

网站建设青雀,哈尔滨的网站设计,一般网站做推广要多大的带宽和内存,做室内意向图的网站题目是输入一个数字&#xff0c;分解成三个数字的和&#xff0c;这三个数字都不相同&#xff0c;并且都不可以被三整除&#xff0c;如果存在输出YES并且输出任意一组可能的三个数字&#xff0c;否则输出NO 代码 #include<bits/stdc.h> using namespace std;int main() …

题目是输入一个数字,分解成三个数字的和,这三个数字都不相同,并且都不可以被三整除,如果存在输出YES并且输出任意一组可能的三个数字,否则输出NO

代码

#include<bits/stdc++.h>
using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int x,y,z;int n;bool flag=false;scanf("%d",&n);for(x=1;x<=10;x++){for(y=x+1;y<=10;y++){z=n-x-y;if(x%3!=0&&y%3!=0&&z%3!=0&&z>y){printf("YES\n%d %d %d\n",x,y,z);flag=true;break;}}if(flag==true)	break;}if(!flag)	printf("NO\n");}return 0;
}

循环,让第二个数字y等于x+1就可以保证最开始两个数字就不相等,还是这种方法最明了,直接条件判断 

赛时代码

#include<bits/stdc++.h>
using namespace std;int ans[5];int main()
{int t;scanf("%d",&t);while(t--){int n;bool flag=false;scanf("%d",&n);int temp=n/3;if(n%3==0){if(temp%3!=0){ans[0]=temp-1,ans[1]=temp,ans[2]=temp+1;while((ans[0]%3==0||ans[2]%3==0)&&ans[0]>0){ans[0]-=1;ans[2]+=1;}}else{ans[0]=temp,ans[1]=temp-1,ans[2]=temp+1;while((ans[0]%3==0||ans[2]%3==0||ans[0]==ans[1])&&ans[0]>0){ans[0]-=1;ans[2]+=1;}}if(ans[0]+ans[1]+ans[2]==n&&ans[0]%3!=0&&ans[2]%3!=0&&ans[1]%3!=0&&ans[0]!=ans[1]&&ans[0]!=ans[2]&&ans[1]!=ans[2])	flag=true;}else{int q=n%3;ans[0]=temp,ans[1]=temp,ans[2]=temp+q;if(temp%3!=0){ans[0]=temp,ans[1]=temp,ans[2]=temp+q;while((ans[0]%3==0||ans[2]%3==0||ans[0]==ans[1])&&ans[0]>0){ans[0]-=1;ans[2]+=1;}}else{ans[0]=temp-1,ans[1]=temp+1,ans[2]=temp+q;while((ans[0]%3==0||ans[2]%3==0||ans[0]==ans[1]||ans[1]==ans[2])&&ans[0]>0){ans[0]-=1;ans[2]+=1;}}if(ans[0]+ans[1]+ans[2]==n&&ans[0]%3!=0&&ans[2]%3!=0&&ans[1]%3!=0&&ans[0]!=ans[1]&&ans[0]!=ans[2]&&ans[1]!=ans[2])	flag=true;}if(n<=3)	flag=false;if(flag==true)	{printf("YES\n");printf("%d %d %d\n",ans[0],ans[1],ans[2]);}else	printf("NO\n");}return 0;
}

标签是暴力破解,构造算法,数学

仔细想了一下,确实暴力就可以直接过

我比赛的时候想的方法确实比较繁琐哈哈

讨论输入的数字n是否能够被3整除,把数字n除以3,然后把这三个数字放在ans[0],ans[1],ans[2]里面,保证中间的位置满足不被3整除,然后调整ans[0],ans[2]这两个数字,ans[0]--,ans[2]++,一个因子减少一,另一个因子增加一,和n保持不变,所以可以满足条件,也可以寻找到答案

 另外一种解法

#include<bits/stdc++.h>
using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);if(n%3==0){int z=n-5;if(z%3!=0&&z>4)	printf("YES\n1 4 %d\n",z);else	printf("NO\n");}else{int ans=n-3;if(ans%3!=0&&ans>2)	printf("YES\n1 2 %d\n",ans);else	printf("NO\n");}}return 0;
}

上面这种做法是找规律,我们只需要输出一种符合条件的情况即可,所以我们考虑一些特殊的数字,比如说1和2,这两个数字不相同并且两个数字的和是3,如果数字n是可以被3整除的,并且大于3的话(如果是3的话,剩下的那个数字只可以是0,不符合条件),剩下的那个数字就一定可以被3整除,但是如果n不可以被3整除,剩下的那个数也不可以被3整除(如果可以被3整除的话,n就可以被3整除了)

有点绕

分两种特殊情况来考虑,第一种特殊情况,取x=1,y=2,这个时候假设n是不能被3整除的数字,剩下的那个数字我们记为z,z一定是不能被3整除的,因为假设z可以被3整除,加上3还是可以被3整除(加上3就等于n了),和假设矛盾,所以z一定不能被3整除(反证法),注意需要满足z大于2这个条件

第二种情况就是取x=1,y=4,考虑n可以被3整除,剩下的数字z一定是不可以被3整除的,证明如下,还是反证法,就是假设z是可以被3整除的,假设z=3b,n=3k,那么有5+3b=3k,移向可以得到5/3=k-b,两个整数的差不可能是小数,所以矛盾,所以z一定是不可以被3整除的

#include<bits/stdc++.h>
using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);if(n%3==0){int z=n-5;if(z>4)	printf("YES\n1 4 %d\n",z);else	printf("NO\n");}else{int ans=n-3;if(ans>2)	printf("YES\n1 2 %d\n",ans);else	printf("NO\n");}}return 0;
}

经过一通分析之后发现这样子其实更加简洁,但是前期需要分析的更多一些

 

 

 

http://www.yayakq.cn/news/539459/

相关文章:

  • 记事本做网站如何排版织梦做商城类网站教程
  • 做彩票网站代理违法吗网站弹窗无法显示
  • 怎么做好营销网站开发西安有什么网页设计公司
  • 徐州企业建站系统模板自己做网站投放有流量么
  • 网站建设公司目标客户wordpress股市实时数据
  • 网站建设凡客做百度网站还是安居客网站
  • 东莞公司网站网站建设中英语
  • 广告设计职业生涯规划书商丘seo博客
  • 火锅料网站方案怎么做惠州人才网
  • 旅游门票做的最好的是哪个网站如何查网站死链
  • 网站源代码上传都需要怎么做开发公司设计部工作建议
  • 桂阳县网站建设公司哪家好长沙网络域名注册
  • 用动态和静态设计一个网站QQ点钓鱼网站后怎么做
  • 中国优秀企业网站免费收录网站
  • 淘宝网站用什么语言做的广告公司推广方案
  • 公司营销型网站开发宁波网站seo诊断工具
  • 网站标签span免费com域名注册永久
  • 大数据时代的智能营销北京优化网站外包公司
  • 塔城网站seo开发网站用什么软件
  • 网站建设新报价图片wordpress外贸主
  • 企业微信网站建设网站后台维护月薪多少
  • 如何创建一个免费网站微小店网站建设价格
  • win7iis部署asp.net网站互联网网站模板
  • 青岛seo网站排名电话号码查询企业
  • 人力社保网站建设的意义企业宣传册设计与制作
  • ps酒店网站模板中国建设招标网官方网站
  • 服装网站建设公司一流专业建设标准
  • 宁波做seo推广企业郑州网站建设专注乐云seo
  • app制作网站收费吗网站宣传营销
  • 旅游网站课程设计江西省建设厅业绩网站