昨天参加了华为软件设计大赛,题目虽然基础,好久没写程序了,也感觉到手生。
有两道程序题:
1.怎样判断一个数a是否为2的n次方?
在网上搜了下:思路:a&(a-1)如果为零的话,a就是2的n次方。
#include <iostream>
using namespace std;
void main()
{
long a;
cout<<"请输入Long a:";
cin>>a;
if(a&(a-1))
cout<<"a不是2的n次方!"<<endl;
else
cout<<"a是2的n次方!"<<endl;
}
2.有两个数组a[10],b[10],求a和b的交集c[10],及b中含有而a中不含有的元素集合d[10]。
思路:遍历比较,方法比较笨,如果有更好的方法可以交流下。
#include <iostream>
using namespace std;
void main()
{
int a[10], b[10],c[10],d[10];
int i=0,j=0,k=0,n=0;
int flag=0;
for(i=0;i<10;i++){
cout<<"a["<<i<<"]=";
cin>>a[i];
}
for(i=0;i<10;i++){
cout<<"b["<<i<<"]=";
cin>>b[i];
}
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(a[i]==b[j]) {
c[k]=a[i];
k++;
break;
}
for(i=0;i<10;i++){
flag=0;
for(j=0;j<k;j++){
if(b[i]==c[j]){
flag=1;
break;
}
else if(flag==0 && j==k-1){
d[n]=b[i];
n++;
}
}
}
cout<<"c[10]:"<<endl;
for(i=0;i<k;i++)
cout<<"c["<<i<<"]="<<c[i]<<endl;
cout<<"d[10]:"<<endl;
for(i=0;i<n;i++)
cout<<"d["<<i<<"]="<<d[i]<<endl;
}