NYIST 46 最少乘法次数

最少乘法次数

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次;

输入
第一行m表示有m(1<=m<=100)组测试数据;
每一组测试数据有一整数n(0<n<=10000);
输出
输出每组测试数据所需次数s;
样例输入
3
2
3
4
样例输出
1
2
2
上传者
李剑锋
解题:快速幂。。。弱菜。。。几个月前时的我居然不会。。。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <vector>
 8 #include <queue>
 9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 int ans;
18 void Fast(int n){
19     while(n){
20         if(n&1) ans++;
21         n >>= 1;
22         if(n) ans += 1;
23     }
24 }
25 int main() {
26     int n,m;
27     scanf("%d",&n);
28     while(n--){
29         scanf("%d",&m);
30         ans = 0;
31         Fast(m);
32         printf("%d\n",ans?ans-1:ans);
33     }
34     return 0;
35 }

时间: 2024-10-09 11:57:14

NYIST 46 最少乘法次数的相关文章

NYOJ 46 最少乘法次数

#include<stdio.h>int f(int n) { int s; if(n==1) s=0; else if(n==2) s=1; else if(n%2==0) s=f(n/2)+1; else s=f(n-1)+1; return s;}int main(){ int num,a; scanf("%d\n",&num); while(num--) { //int a; scanf("%d",&a); printf(&quo

最少乘法次数 NYOJ 46

1 #include<stdio.h>//最少乘法次数(46) 2 int main() 3 { 4 int i,x,m; 5 scanf("%d",&x); 6 while(x--){ 7 scanf("%d",&m); 8 i=0; 9 while(m!=1){ 10 if(m%2==1){ 11 i+=2; 12 } 13 else i+=1; 14 m/=2; 15 } 16 printf("%d\n",i);

NYOJ 46 最小乘法次数

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=46 用类似于快速幂的方法做,注意1的时候是0: #include <iostream> using namespace std; int main() { int ase; int num; int res; cin>>num; while(num--) { res = 0; cin>>ase; if(ase==1) { cout<<0<<

最少乘法次数

最少乘法次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次: 输入 第一行m表示有m(1<=m<=100)组测试数据: 每一组测试数据有一整数n(0<n<=10000); 输出 输出每组测试数据所需次数s; 样例输入 3234 样例输出 122 最少乘法次数

NYOJ-最少乘法次数

nyoj 最少乘法次数 http://acm.nyist.net/JudgeOnline/problem.php?pid=46 代码: #include<stdio.h> void f(int n,int &k) { if(n==1) return; k++; if(n&1) k++; n/=2; f(n,k); return; } int main() { int t,n,k,i; scanf("%d",&t); while(t--) { k=0;

nyoj 46-最少乘法次数 (递推)

46-最少乘法次数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:5 submit:18 题目描述: 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次: 输入描述: 第一行m表示有m(1<=m<=100)组测试数据: 每一组测试数据有一整数n(0<n<=10000); 输出描述: 输出每组测试数据所需次数s; 样

LeetCode 5282. 转化为全零矩阵的最少反转次数 bfs 双向bfs

地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它反转(反转表示 0 变 1 ,1 变 0 ).如果存在和它相邻的单元格,那么这些相邻的单元格也会被反转.(注:相邻的两个单元格共享同一条边.) 请你返回将矩阵 mat 转化为全零矩阵的最少反转次数,如果无法转化为全零矩阵,请返回 -1 . 二进制矩阵的每一个格子要么是 0 要么是 1 . 全零矩阵是

1、对一个正整数算到1需要的最少操作次数

题1:实现一个函数,对一个正整数n,算得到1需要的最少操作次数.操作规则为:如果n为偶数,将其除以2:如果n为奇数,可以加1或减1:一直处理下去:例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1 要求:实现函数(实现尽可能高效) int func(unsign int n):n为输入,返回最小的运算次数.给出思路(文字描述),完成代码,并分析你算法的时间复杂度. java源程序: package bfgy.lab.work; import 

nyist 58 最少步数

最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1  1,0,0,1,0,0,1,0,1  1,0,0,1,1,0,0,0,1  1,0,1,0,1,1,0,1,1  1,0,0,0,0,1,0,0,1  1,1,0,1,0,1,0,0,1  1,1,0,1,0,1,0,0,1  1,1,0,1,0,0,0,0,1  1,1,1,1,1,1,1,1,1 0表示道路,1表示墙. 现在输入一