题目如下:
//下面的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;
}
输出如下: