2010年大连华信校园笔试题及答案
一、 逻辑题(这3道逻辑题华信以前都是考过的,好像是07年,做过之后网上找答案是才发现的。)
1、 某公司男女比例为5:3,该公司又分为总公司和子公司,人数比例为3:2,总公司男女比例7:5,子公司有35名女员工,总公司和子公司共有男员工多少人?
首先要看清题目,是要求男员工总数,而不是总公司和子公司各有多少男员工!
设共有男员工5x人,则
公司女员工数是3x人
公司共有员工是5x+3x=8x
总公司女员工数:3/5*8x*5/12=2x
故3x – 2x = 35 x = 35
答案:5x = 175
2、 10个人分100斤苹果,年龄从小到大,每两人相差的重量都一样,又知第八个人分到6斤,每两人相差的苹果重量是多少?
设第一个人分到的重量是x,每两人相差的重量是y,由题意
X + 7y = 6
X +(x+y) + (x+2y) + ….+(x+9y)=10x + 45y = 100
得到y= - 1.6
故可知每两人相差的苹果重量是1.6斤
3、 哥五个各有一些糖块,大的比小的多,老大把自己的分给大家一些,谁有多少块再分给谁多少块,然后老二把现有的块数分给大家一些,谁有多少块再分给谁多少块,老三、老四、老五依次类推,最后五个人每人都有32块糖,问最初每人各有多少块糖?
这题可用逆推的方式求得
设初始值: a b c d e
老大分后: ? 2b 2c 2d 2e
老二分后: ? ? 4c 4d 4e
老三分后: ? ? ? 8d 8e
老四分后: ? ? ? ? 16e
老五分后: 32 32 32 32 32
逆推可知老四分后各值为:
16 16 16 16 32*5 – 16*4=16e
得到e = 6
同理可得知老三分后为
8 8 8 8d=160-72 8e=48
得到d=11
同理可得到其他值依次为
81 41 21 11 6
二、 编程题
1、 写一个函数统计其中出现的特殊字符的个数,依次存放在b【10】数组中,存放如下:
~ b[0]
! b[1]
@b[2]
#b[3]
$b[4]
%b[5]
^b[6]
&b[7]
*b[8]
其他b[9]
可用Java或c实现
我写的大概如下:
viod fun(char[] str){
int[] b = new int[10];
for(int i=0;i case ‘~’:b[0]++;break; case ‘!’:b[1]++;break; case ‘@’:b[2]++;break; case ‘#’:b[3]++;break; case ‘$’:b[4]++;break; case ‘%’:b[5]++;break; case ‘^’:b[6]++;break; case ‘&’:b[7]++;break; case ‘*’:b[8]++;break; default:b[9]++; } } } 2、给出如下的链表定义: typedef struct structLink { int value; struct structLink *pHead; }; 分别写出对删除第一个节点、最后一个节点、和制定节点的函数 #define ERROR -1 #define SUCCESS 1 int delectHead(structLink &link){ if(link->pHead == NULL) return ERROR; link = link->pHead; return SUCCESS; } int deleteTail(structLink &link){ if(link->pHead == NULL) return ERROR; while(link->pHead->pHead != NULL){ link = link->pHead; } Link->pHead = NULL; return SUCCESS; } int deleteNode(structLink &link, int n){ int i = 0; structLink p = link; if(link->pHead == NULL) return ERROR; while(i p = p->pHead; i++; } if(i>n || !p) return SUCCESS; p->pHead = p->pHead->pHead; return SUCCESS; } 3、关于世博会国家馆门票的,设中国馆门票为100元/人,德国馆门票为10元/人,日本馆门票为10/3元/人。假设有一个单位有100人,打算用1000元来购置门票,要求: 每个国家馆的门票都要求至少有一张 每人都要有一张门票,不能多也不能少 1000元必须都花完,不能多也不能少 编程共有多少种购票方案? void funBuy(){ int count = 0; for(int i=1;i<=98;i++){ for(int j=1;j<=98;j++){ if(100*i + 10*j + 10/3*(100-i-j)==1000) count++; } } } 因篇幅问题不能全部显示,请点此查看更多更全内容