有一组包含1~n内所有数字 且只有一个数字重复的数组A[],找出这个重复的数字。
2<=n<=10000
#include <iostream>
using namespace std;
int main ()
{
int A[10005];
int n;
int X1=0;
cin>>n;
for (int i=1;i<=n;i++)
{
X1=(X1^i);
}
for (int i=1;i<=n+1;i++)
{
scanf ("%d",&A[i]);
X1=(X1^A[i]);
}
cout<<X1<<endl;
return 0;
}
有一个数组,里面一个数字只出现了一次,其余的都出现了两次,找到那个落单的数。
#include <iostream>
using namespace std;
int main ()
{
int map[100005];
int n;
int x0=0;
cin>>n;
for (int i=1;i<=n;i++)
{
scanf ("%d" ,&map[i]);
x0=(x0^map[i]);
}
cout<<x0<<endl;
return 0;
}
输入一个数,判断该数字的二进制中有几个1.
两种方法。
#include <iostream>
using namespace std;
int main ()
{
int n;
cin>>n;
int cnt=0;
int N=n;
while (n)
{
if (n&1) cnt++;
n>>=1;
}
cout<<cnt<<endl;
int sum=0;
while (N)
{
N=(N-1)&N;
sum++;
}
cout<<sum<<endl;
return 0;
}
输入一个数字,判断这个数字是否是2的n次幂
2的n次幂在二进制表示中只有一个1.
#include <iostream>
using namespace std;
int main ()
{
long long int n;
cin>>n;
int cnt=0;
while (n)
{
n=(n-1)&n;
cnt++;
}
if (cnt==1)
{
cout<<"YES"<<endl;
} else {
cout<<"NO"<<endl;
}
return 0;
}
输入一个数,将这个数的二进制的奇偶位互换,在以十进制输出。
#include <iostream>
using namespace std;
int main ()
{
int n;
cin>>n;
int a;
int b;
int c;
a=n&0xaaaaaaaa;
b=n&0x55555555;
a>>=1;
b<<=1;
c=a^b;
cout<<c<<endl;
return 0;
}
输入一个0~1之间的数,求它的二进制。
如果32位不能表示则打印 “ERROR” 。
#include <iostream>
using namespace std;
int main ()
{
int sb[100]={0};
int t=1;
double n;
cin>>n;
double cnt=n*2;
sb[0]=0;
while (cnt)
{
if (cnt>=1)
{
sb[t]=1;
cnt=cnt-1;
} else if (cnt<1)
{
sb[t]=0;
}
if (t>32)
{
cout<<"ERROR"<<endl;
return 0;
}
cnt=cnt*2;
t++;
}
cout<<"0.";
for (int i=1;i<t;i++)
{
cout<<sb[i];
}
return 0;
}
详解欢迎关注我的公众号:王同学的蓝桥杯训练营