HDU 1597的调试,为什么不能直接退出while,还要执行几次下面的if
#include <cstdlib>
#include <iostream>
using namespace std;
long long tmp[70000]; //存下到目前数组下标位置存下的数位的数量
long long n;
long long tmp2;
int flag;
void my_search(int l, int r)
{
int m;
m = (l + r) / 2;
while(flag){
if (tmp[m] < n && tmp[m + 1] >= n) //找出前面子串的数位和
{
tmp2 = m;
flag=0;
}
if (tmp[m] >= n)
my_search(l, m - 1);
if (tmp[m + 1] < n)
my_search(m + 1, r);
}
}
int main()
{
int i;
int T;
int ans;
for (i = 1; i <= 100; i++)
tmp[i] = tmp[i - 1] + i;
// cout << tmp[65536] << endl;
cin >> T;
while (T--)
{
flag=1;
cin >> n;
tmp2 = -1;
my_search(1, 20);
ans = n - tmp[tmp2]; //减去前面完整的数位子串,得到最后所在的子串的位置,这里的位置即对应数字
ans = ans % 9;
if (ans == 0) ans = 9;
cout << ans << endl;
}
return 0;
}
在单步调试中,为什么不能直接退出while,还要执行几次下面的if,提交也是超时
问了UML老师,老师也没给出明确解答,老师说可能还是二分查找的逻辑不对。可能也是,在二分查找的边界区间上自己并不是搞得很明朗清楚

浙公网安备 33010602011771号