竞赛
考级
#include <bits/stdc++.h> using namespace std; long long n,ans,j = 1; int main(){ cin>>n; if(n%2==1){ ans = -1; cout<<ans; return 0; } while(pow(2,j)<10000000){ if(pow(2,j)==n){ ans = n; cout<<ans; return 0; } j++; } while(n>=2){ int tmp = 1; while(pow(2,tmp)<=n){ tmp+=1; } ans = pow(2,(tmp-1)); n-=ans; cout<<ans<<" "; } return 0; }
曼波(互关)
代码解释 1、读取输入:读取一个整数 ( n )。 2、奇数判断:如果 ( n ) 是奇数,直接输出 -1 并结束程序。 3、二进制转换:通过右移和按位与操作,将 ( n ) 转换为二进制,并记录每个 1 对应的 2 的次幂。 4、输出结果:如果找到了若干个 2 的正整数次幂,从大到小输出这些次幂的值;否则输出 -1。
RUS.
#include <bits/stdc++.h> using namespace std; long long n,ans,j = 1; int main(){ cin>>n; if(n%2==1){ ans = -1; cout<<ans; return 0; } while(pow(2,j)<10000000){ if(pow(2,j)==n){ ans = n; cout<<ans; return 0; } j++; } while(n>=2){ int tmp = 1; while(pow(2,tmp)<=n){ tmp+=1; } ans = pow(2,(tmp-1)); n-=ans; cout<<ans<<" "; } return 0; } 我是世界上唯一的御鬼师?-第一章 一天,萧凡正伏在在书桌前写小说。萧凡是一点都不想睡觉啊,手中的笔不断在纸上滑动,画出一道道优美的弧线。可猛然间,萧凡心中一惊,因为他看到:纸张上倒影出来了一抹妖异的红光! 是血瞳!一个想法顿时掠过了箫凡的脑海。随即,又以自嘲的语气自言自语道:“这怎么可能呢!这不过是会在小说了才会出现罢了,这可是现实世界,箫凡,你清醒一点!” 可即使箫凡心中一直在暗示自己这一切都是幻想,自己看花了之时。一个有些疲倦的声音响起:“林墨?大半夜不睡觉,写什么东西啊?” 林墨?这瞬间给我大脑整蒙了,这不正是小说里的人物嘛!还有,这个声音是谁发出来的! 【叮~非御鬼世界开挂系统已开启!宿主可以通过赚取情绪积分增强身体素质!也可以现在拥有小说原主体内契约鬼的一切技能!】 同时,在原来的身体宿主在御鬼世界的一切记忆瞬间涌入脑海,体内三十多名契约鬼也得知了此消息。电锯鬼第一个高声哀嚎起来:“不!不!!不!!!换主人了!没肉吃了!这!让我怎么活!!!啊啊啊啊啊啊啊啊啊!” 血瞳鬼无语:“话说......咱们真的能相信这个人么?” 话一出口,三十多只契约鬼纷纷议论,叫的最凶的都有:血瞳鬼、鬼秀才、四大恶鬼——罗伞鬼、琵琶鬼、古剑鬼、血鳞鬼等等。原因很简单,他们并不欣赏这个看起来并无能力的一个叫箫凡的小子。 这时,算命鬼猛然睁开眼:“他并不是另一个世界的人,我们,除了换了一个御鬼师,穿越到了5年前!” “现在的林墨,估计是在A级鬼蜮恐怖医院试炼!” 他这一句话,语出惊“鬼”。众鬼哗然,所有女鬼真的是无语了呀!三元老(血瞳,大X,电锯)道:“所以,是不是应该去一趟恐怖医院?” “血瞳老哥,那还等什么?走!” 来到阵法前,我冷笑道:“安全局这阵法完全没用啊!”说完,启用双血瞳技能2:血雾瞬身,轻松越过阵法。那纸人考官丝毫没有发觉,我直接瞬移向眼科室。原先的血瞳鬼已经消失了。血瞳鬼都无语了! “不是!都21:00了,林墨早就进庇护所ICU了!” 为了暂时先不被林墨血瞳察觉,箫凡便决定:先去一趟黔省,见一下林墨的老爸——林岚。 箫凡召唤出沙鬼,骑了上去,沙鬼立即起飞,不出半小时就到了黔省。箫凡隐蔽了气息,来到了村口。村口有一个傻傻的傻柱,箫凡心里自然清楚,这表面上的傻柱实际上可有七重御鬼师的实力,并且还是未来的战友,打得过,但不能打。 箫凡恭恭敬敬的行了一个礼,道:“您好,我是来拜访林岚先生的。” 傻柱也不傻,当即问道:“请问你找林岚先生干什么?” 箫凡呵呵一笑:“我来找你们一起当盟友,对抗周国,一同完成复国大计的!” “我凭什么相信你?”傻柱警惕性很高。 箫凡召唤出轮回鬼(轮回鬼是孤竹国末代国君,有传国玉玺,孤竹国是什么国家,后面会提到,大家只需知道孤竹国与封魔国世代通姻),说道:“他是孤竹国末代国君,有传国玉玺!” 傻柱感觉来人应该是善意的,于是便放箫凡进去了。 傻柱敢这么做起码有二层保障。1:村里每个人都实力不凡,起步都是七重御鬼师,且契约鬼全是半步鬼王。此人要想作乱,是抵不过他们的(太自信了)。2:他们要想复国,得有不少支持他们的力量,眼前这个八重御鬼师,不正是一个主力嘛! 重重考虑之下,傻柱就把他箫凡了进去。 箫凡也不浪费时间,一进村,箫凡便直奔林岚所在的房子,林岚此时正在抽一袋旱烟。他一见来者(箫凡),立即爆发出了九重御鬼师的威压,目光冷酷道:“先生,请问你来干什么?”林岚是九重御鬼师,箫凡不想硬碰硬,便说道:“山风国师,”
当年挥墨
准
Ù̜ṔD̂Ă̭T̃̆Ē̅
xm™
歌者-质量点
#include<bits/stdc++.h> using namespace std; int main(){ long long n; cin >> n; if(n % 2 == 1){ cout << -1; return 0; } long long pow2[105]; for(int i = 1;i <= 24;i++){ pow2[i] = pow(2,i); } whilehile(n != 0){ for(int i = 24;i >= 1;i--){ if(pow2[i] <= n && pow2[i+1] > n){ cout << pow2[i] << ' '; n -= pow2[i]; } } } return 0; }
DARK SPECTRE
#include<bits/stdc++.h> using namespace std; int main(){ long long n; cin >> n; if(n % 2 == 1){ cout << -1; return 0; } long long pow2[105]; for(int i = 1;i <= 24;i++){ pow2[i] = pow(2,i); } while(n != 0){ for(int i = 24;i >= 1;i--){ if(pow2[i] <= n && pow2[i+1] > n){ cout << pow2[i] << ' '; n -= pow2[i]; } } } return 0; }
#include<iostream> using namespace std; int main(){ int a,b=2; cin>>a; if (a%2!=0){ cout<<-1; }else{ while (a>0){ for(int i=2;i<=a;i*=2){ b*=2; } b/=2; cout<<b<<" "; a=a-b; b=2; } } }
菜
#include<bits/stdc++.h> using namespace std; int main(){ int n,ans[10000],idx=0; cin>>n; if(n%2==1){ cout<<-1; return 0; } while(n>0){ ans[idx]=n%2; idx++; n/=2; } for(int i=idx-1;i>=0;i--){ if(ans[i]==1) cout<<(int)(ans[i]*pow(2,i))<<" "; }
༺ཌༀluoyongqiༀད༻
龍隱川_夜無思☄️
#include <iostream> #include <vector> using namespace std; int main(){ int n; cin >> n; if(n % 2 != 0){ cout << -1 << endl; return 0; } vector<int> result; }
173****4471
智造体
编程之神
#include <iostream> #include <cmath> #include <cstdio> using namespace std; int n,a[30],idx; void change(int b){ int res=0; while(b){ if (b&1) a[res]=pow(2,res); res++; b>>=1; } idx=res; } int main(){ scanf("%d",&n); if (n%21 || n0){ printf("-1"); return 0; } change(n); for(int i=idx;i>=1;i--) if (a[i]!=0) printf("%d ",a[i]); return 0; }
艾伦 尤文
#include <bits/stdc++.h> using namespace std; int main(){ int a; cin>>a; int y=1; if(a%2!=0){ cout<<"-1"; } else{ while(y<a){ y=2*y; } while(a>1){ while(y>a){ y=y/2; } a=a-y; cout<<y<<" "; } } }
Code Breaker
#include<stdio.h> long long pw(int a,int b){ for(int i=0;i<b;i++){ a*=2; } return a; } int main(){ long long a,cnt=0; scanf("%lld",&a); if(a%2==1){ printf("%d",-1); return 0; } bool aa[32]; while(a){ aa[cnt++]=a%2; a/=2; } }
清风明月
这道题主要考察对数字拆分和二进制表示的理解,解题的关键在于利用2的幂次特性和贪心策略 核心思路 1. 问题分析 * 优秀的拆分要求将正整数n分解为不同的2的正整数次幂之和(即2¹, 2², 2³...,不包括2⁰=1)。 * 例如:10 = 8 + 2 = 2³ + 2¹ 是优秀的拆分,而7 = 4 + 2 + 1 不是(因为1不是2的正整数次幂)。 2. 关键判断 * 奇数直接排除:由于2的正整数次幂都是偶数,任何奇数都无法拆分为偶数之和,因此直接输出-1。 * 偶数的处理:对于偶数n,需要进一步判断是否能拆分为不同的2的正整数次幂之和。 3. 贪心策略 * 从最大的2的幂次开始尝试:每次选择不超过当前剩余值的最大2的幂次,确保拆分出的数字互不相同且尽可能大。 * 二进制思想:每个偶数都可以用二进制表示,其二进制位上为1的位置对应2的幂次。例如,6的二进制是110,对应2² + 2¹ = 4 + 2。 解题步骤 1. 输入处理 * 读取整数n,判断奇偶性。若为奇数,直接输出-1并结束。 2. 拆分过程 * 初始化剩余值current = n和计数器cnt。 * 从最大可能的2的幂次(如2³⁰,覆盖题目范围1e7)开始逆序遍历: * 对于每个幂次power = 2^i,若power ≤ current,则将其加入拆分结果,并更新current -= power。 * 若current减为0,说明拆分完成,提前退出。 3. 输出结果 * 若最终current为0,按从大到小输出拆分结果;否则输出-1。 代码实现关键点 * 幂次计算:使用位移运算1 << i代替pow(2, i),避免浮点数误差。 * 数组存储:用数组记录拆分出的2的幂次,确保顺序正确。 * 输出格式:注意最后一个数字后不能有多余空格。 复杂度分析 * 时间复杂度:O(log n),主要来自遍历2的幂次。 * 空间复杂度:O(log n),最坏情况下需要存储所有2的幂次。 通过这种方法,可以高效且正确地判断并输出优秀的拆分方案。
无敌小浅大王
共63条