数字追赶--搜狐笔试题

来源:互联网 发布:房屋设计软件哪个好 编辑:程序博客网 时间:2024/06/06 15:48

题目如下:

//下面的for循环分别循环了几次。1.unsigned short i,j;for(i=0, j=2; i!=j; i+=5, j+=7){}2.unsigned short i,j;for(i=3,j=7;i!=j;i+=3,j+=7){}

分析:
题目1:unsigned short 可以表示为2的16次方个数,其数的范围为0到2的16次方-1,在题目1中,j比i大2,i以每次+5的速度增长,j以每次+7的速度增长,当增长到2的16次方-1,会重新置0。所以问题就转换成i跟j在环中不同位置以不同速度追赶相遇的问题,即for循环需要循环几次两个数才会相等,假设循环的次数为t,则有7t-5t+2=65536,得t=32767。
题目2:类似题1,有7t-3t+4=65536,t=16383。

程序验证:

#include <iostream>using namespace std;int main(){    unsigned short i,j;    int count1=0,count2=0;    for(i=0, j=2; i!=j; i+=5, j+=7)    {        count1++;    }    cout<<count1<<endl;    for(i=3, j=7; i!=j; i+=3, j+=7)    {        count2++;    }    cout<<count2<<endl;} 

输出如下:

这里写图片描述

原创粉丝点击