摘要: 给你一个数可能是正数,也可能是负数。求其给定的二进制形式,即事先规定某一位是正值还是负值;初始化时,若给的是负值,只要求其相反数,同时也把题目的要求取反,即p改成n,n改成p;然后根据二进制的性质,如果给的数k是奇数,则其二进制形式的最低位一定是1(不管其是p位还是n位),所以先对k-1或是k+1,然后右移一位,同样判断是偶数还是奇数,是偶数的话最低位就为零了,这时只要对k右移一位即可;这样一直下去,如果在给定二进制长度内不能使k变为0,则说明impossible。否则输出res[]即可;网上的代码;#include<cstdlib>#include<iostream> 阅读全文
posted @ 2012-04-19 16:43 orangeblog 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 排列组合 求从n个数中选出m个的组合数,不分先后,不需用大数来做,而是把分子分母分别保存在两个数组p、q中,然后依次把分母的元素与分子相除,最终所有分母都为一,这时把分子数组元素依次相乘便得到结果;#include<iostream>using namespace std;int gcd(int m,int n){ if(m%n==0) return n; else return gcd(n,m%n);}int main(){ int n,k,i,j; while(cin>>n>>k) { if(n==0&&k==... 阅读全文
posted @ 2012-04-19 13:09 orangeblog 阅读(560) 评论(0) 推荐(1) 编辑