今日头条2018 笔试题2
转自:https://www.nowcoder.com/discuss/70304?type=0&order=0&pos=5&page=1
/* 定义两个字符串变量:s,m,再定义两种操作, 第一种操作: m=s s=s+s //说明:s只会变为原来的2倍 第二中操作: s=s+m 假设s,m初始化如下: s="a" m=s 求最小的操作步骤数,可以将s拼接到长度等于n。 示例1: 输入6,输出3 示例2: 输入4,输出2 */ /* 思路: 第一种操作,s变为原来的1倍(说明偶数的时候适用) */ #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int s = 1, m = 1, cnt = 0; while (s != n) { if (2 * s == n || (2 * s < n && n%s == 0)) m = s, s = 2 * s; else s += m; cnt++; } cout << cnt << endl; return 0; }