zoukankan      html  css  js  c++  java
  • hdu 1725(Find minimal sum)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1725

    思路:几天前看到过这道题,当时没什么想法,今天心血来潮,就想尝试一下,1Y...orz...

    一开始先打个表,把13以内的阶乘都算出来,然后二分查找,二分查找的时候如果没有找到相等的,返回的位置是后一个。。。这样循环就可以了。

    View Code
     1 #include<iostream>
     2 using namespace std;
     3 int facs[13]={0,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600};//打表找出前12个的阶乘
     4 
     5 int Binary_Search(int low,int high,int number){
     6     while(low<=high){
     7         int mid=(low+high)/2;
     8         if(facs[mid]==number)return mid;
     9         else if(facs[mid]>number)high=mid-1;
    10         else low=mid+1;
    11     }
    12     return low;
    13 }
    14 
    15 int main(){
    16     int n;
    17     scanf("%d",&n);
    18     while(n--){
    19         int m,summin=0;
    20         scanf("%d",&m);
    21         while(m){
    22             int pos=Binary_Search(0,12,m);//二分
    23             //相等的话就要退出
    24             if(facs[pos]==m){
    25                 summin+=1;
    26                 break;
    27             }else {
    28                 summin+=m/facs[pos-1];
    29                 m%=facs[pos-1];
    30             }
    31         }
    32         printf("%d\n",summin);
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    QR code 乱谈(一)
    用JAVA实现数字水印(可见)
    ctf总结
    Unix/Linux常用命令
    C语言概述
    C语言发发展历史
    为什么要学习C语言
    计算机应用领域
    计算机发展趋势
    如何学习计算机
  • 原文地址:https://www.cnblogs.com/wally/p/2970518.html
Copyright © 2011-2022 走看看