数字追赶--搜狐笔试题

30 篇文章 0 订阅

题目如下:

//下面的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;
} 

输出如下:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值