社区讨论

求助进制相关

灌水区参与者 9已保存回复 15

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@m138gmfc
此快照首次捕获于
2024/09/15 15:06
去年
此快照最后确认于
2025/11/05 00:19
4 个月前
查看原帖
CPP
1 	#include <iostream>
2 	using namespace std;
3 
4 	long long n, ans;
5 	int k, len;
6 	long long d[1000000];
7 
8 	int main() {
9 	  cin >> n >> k;
10	  d[0] = 0;
11	  len= 1;
12	  ans = 0;
13	  for (long long i = 0; i <n; ++i) {
14		++d[0];
15		for (int j = 0; j + 1<len; ++j) {
16		  if (d[j] == k) {
17			d[j] = 0;
18			d[j + 1] += 1;
19			++ans;
20		  }
21		}
22		if (d[len - 1] == k) {
23		  d[len - 1] = 0;
24		  d[len] =1;
25		  ++len;
26		  ++ans;
27		}
28	  }
29	  cout << ans << endl;
30	  return 0;
31	}
问题:若 k=1,则输出 ans 时,len=n。( )
为什么是错?
解析这么说,但是我不理解:
不存在1进制,那k为1时相当于做了什么呢? 第1轮,d变为{1},内层for循环不工作,后面的if导致进位,dd变成{0,1},len为2。 第2轮,d变成{1,1},内层for循环启动,d变成{0,2},后面的if不成立,不发生进位。之后每轮都像第2轮一样,不会发生进位, n轮后,d变为{0,n},len依然为2。 第一问是错误的。

回复

15 条回复,欢迎继续交流。

正在加载回复...