今日头条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;
}

  

原文地址:https://www.cnblogs.com/beihaidao/p/8644598.html