广联达2018校招笔试题
程序员文章站
2022-04-02 18:27:57
...
广联达现场笔试,有一种难受叫做,没时间了,也没纸了,但是却发现了程序的错误。。。
第一题:输入一个N,输出1-2+3-4+5-6+7......N的值。
int fun(int num)
{
if(num <= 0)
return 0;
int sum = 0;
for(int i = 1; i <= num; ++i)
{
if(i & 1)
sum += i;
else
sum -= i;
}
return sum;
}
void main()
{
int n;
cin>>n;
cout<<fun(n)<<endl;
}
第二题:数组相邻数字差绝对值为1,查找第一个出现指定数字的位置,例如 1,2,3,4,5,6,7,6,5,6,7,8,9 查找7,返回7
int Fun(int *ar,int len,int num)
{
for(int i = 0; i < len;)
{
//int tmp = ar[i] > num ? ar[i] - num : num - ar[i];
int tmp = abs(ar[i]-num);
if(tmp == 0)
return i+1;
i += tmp;
}
}
void main()
{
int ar[] = {2,3,4,3,2,1,2,3,4,5,6,7,8,9,10,9,8,7,8,7,6,5,6,7,8};
int num;
cin>>num;
int len = sizeof(ar)/sizeof(ar[0]);
cout<<Fun(ar,len,num)<<endl;
}
第三题:给定一个非负数组,该数组位置的值代表最大能跳的个数,求其是否能够调到最后一个位置。
bool fun(int *ar,int start,int end)
{
if(start == end)
return true;
for(int i = 1; i <= ar[start]; ++i)
{
return fun(ar,start+i,end);
}
if(start > end)
return false;
}
bool fun(int *ar,int len)
{
if(ar == NULL || len <= 0)
return false;
return fun(ar,0,len-1);
}
void main()
{
int ar[] = {3,2,1,0,4};
int len = sizeof(ar)/sizeof(ar[0]);
if(fun(ar,len))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
四、输入一个字符串,打印字符串的子集。
void Perm(string &st,int i)
{
int k = 0;
while(i)
{
if(i & 1)
cout<<st[k]<<" ";
i >>= 1;
k++;
}
cout<<endl;
}
void Perm(string &st)
{
int size = st.size();
if(size <= 0)
return ;
for(int i = 0; i < (1 << size); ++i)
{
Perm(st,i);
}
}
void main()
{
string st;
cin>>st;
Perm(st);
}
五、有一个盒子中有不定量的白球和黑球,每次取出两个小球,如果颜色相同,则放回一个黑球,否则,放回一个白球。请验证,可以取完小球,并且说明最后剩下的小球颜色,和开始时候的黑白球的数量关系。
这个我也是半斤八两,就不在各位面前班门弄斧了。
----------------------------------------------------------------------------
除了开头说的那种难受之外,还有一种难受,叫做,回来写博客,一个一个发现自己程序的错误。。。
上一篇: 女生说的话千万不能相信!