1. 程式人生 > >湖南省第十一屆大學生計算機程式設計競賽(階乘除法)

湖南省第十一屆大學生計算機程式設計競賽(階乘除法)

問題 F: 階乘除法

時間限制: 5 Sec  記憶體限制: 128 MB
提交: 84  解決: 19
[提交][狀態][討論版]

題目描述

輸入兩個正整數 n, m,輸出 n!/m!,其中階乘定義為 n!= 1*2*3*...*n (n>=1)。 
比如,若 n=6, m=3,則 n!/m!=6!/3!=720/6=120。 
是不是很簡單?現在讓我們把問題反過來:輸入 k=n!/m!,找到這樣的整數二元組(n,m) (n>m>=1)。 
如果答案不唯一,n應該儘量小。比如,若 k=120,輸出應該是 n=5, m=1,而不是 n=6, m=3,因為 5!/1!=6!/3!=120,而 5<6。

輸入

輸入包含不超過 100組資料。每組資料包含一個整數 k (1<=k<=109)。

輸出

對於每組資料,輸出兩個正整數 n和 m。無解輸出"Impossible",多解時應讓 n儘量小。 

樣例輸入

120

1

210

樣例輸出

Case 1: 5 1
Case 2: Impossible
Case 3: 7 4
#include<stdio.h>
#include<iostream> 
#include <algorithm>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#define LL long long
#define INf 0x3f3f3f3f
using namespace std;
int main()
{
    int n;
    int flag,count=1,c,c1;
    while(scanf("%d",&n)!=EOF)
    {
        flag=0;
        printf("Case %d: ",count);
        count++;
        if(n==1)
        {
            printf("Impossible\n");
            continue;
        }
        else
        {
            for(int i=2;i*(i-1)<=n;i++)//確保i的階乘絕對小於等於n
            {
                if(n%i==0)
                {
                    int ans=1;
                    for(int j=i;j>=1;j--)
                    {
                        ans=ans*j;
                        if(ans==n)
                        {
                            c=i;
                            c1=j-1;
                            flag=1;
                            break;
                        }
                    }
                }
                if(flag)
                    break;
            }
        }
        if(flag)
        {
             printf("%lld %lld\n",c,c1);  
        }
        else
            printf("%lld %lld\n",n,n-1);
    }
    return 0;
}


相關推薦

湖南省十一屆大學生計算機程式設計競賽(除法)

問題 F: 階乘除法 時間限制: 5 Sec  記憶體限制: 128 MB提交: 84  解決: 19 [提交][狀態][討論版] 題目描述 輸入兩個正整數 n, m,輸出 n!/m!,其中階

CSU Problem 1781 乘除法——湖南省十一屆大學生計算機程式設計競賽

輸入兩個正整數 n, m,輸出 n!/m!,其中階乘定義為 n!= 1*2*3*...*n (n>=1)。 比如,若 n=6, m=3,則 n!/m!=6!/3!=720/6=120。 是不是很簡單?現在讓我們把問題反過來:輸入 k=n!/m!,找到這樣的整數二元組(n,m) (n>m>=

CSU Problem 1785 又一道簡單題——湖南省十一屆大學生計算機程式設計競賽

此文章可以使用目錄功能喲↑(點選上方[+])  CSU Problem 1785 又一道簡單題 Accept: 0    Submit: 0 Time Limit: 5 Sec    Memory

CSU Problem 1779 錯誤的演算法——湖南省十一屆大學生計算機程式設計競賽

有道題目是這樣的: 輸入一個 n 行 m 列網格,找一個格子,使得它所在的行和列中所有格子的數之和最大。如果答 案不唯一,輸出任意解即可。比如,在下面的例子中,最優解是(1,3),即第一行和的三列的交 點(行從上到下編號為 1~n,列從左到右編號為 1~m),所有 7 個數之和為 35。 快要比賽的時候,

湖南省九屆大學生計算機程式設計競賽 好老師

J - 好老師  我想當一個好老師,所以我決定記住所有學生的名字。可是不久以後我就放棄了,因為學生太多了,根本記不住。但是我不能讓我的學生髮現這一點,否則會很沒面子。所以每次要叫學生的名字時,我會引用離他最近的,我認得的學生。比如有10個學生: A ? ? D ? ? ?

十一屆湖南大學生程式設計競賽 乘除法(思維)

題目思路很清晰,就不講解了,思路分析直接詳細寫在程式碼了,程式碼如下: #include<iostream> #include<cmath> using namespac

河南省十一屆大學生ACM程式設計競賽總結與感悟

        今年大二,第一次參加省賽,前前後後有很多的感悟,容我慢慢道來。        在省賽開始之前,我們實驗室為了準備省賽,在天梯賽藍橋杯之後就開始給參加省賽的同學停課,停到五月五號,因為老師估計今年的省賽應該就是那個時間左右,越臨近比賽我越緊張,因為感覺還是會有點

湖南省八屆大學生計算機程式設計競賽C題 Updating a Dictionary

#include <cstdio> #include <cstdlib> #include <string> #include <cctype> #include <map> #include <set> using namespac

2018湖南省十四屆“嘉傑杯”大學生計算機程式設計競賽總結

      經過三個月的幸苦練習,在省賽這個大舞臺上,我們小隊收穫了一枚銅牌。       從一開始刷南陽oj八十道水題,vj上的二十場校賽,再到多校的場場自閉,CF的熬夜作戰。嗯,我確實付出了很多。 然而我始終在思考,我這麼多的付出到底學到了什麼。貌似也接觸了許多新演算

2018湖南省14屆大學生計算機程式設計競賽---賣萌表情

用貪心來求。我的理解:用貪心來解決問題時要優先選擇貢獻大的。 對於後2種表情,直接列舉就行。 對於前面2種表情,先選擇倒著的笑臉,因為出現‘^ ’時,倒著的笑臉能儘可能多的使用‘v’. #include<bits/stdc++.h> #define ma

2018年湖南省十四屆大學生計算機程式設計競賽 CSU 2164: 2018

題目傳送門 不會自己推,比賽現場找規律 程式碼: #include<bits/stdc++.h> using namespace std; typedef long long L

戰場的數目——湖南省六屆大學生計算機程式設計競賽

戰場由若干單位正方形積木組成。積木佔據了連續的若干列,且圖形周長等於它最小包圍矩形的周長。假設戰場的圖形周長為p,一共有多少種可能的戰場? 戰場不能恰好為一個矩形。 例如,p<8時沒有符合要求的戰場,p=8時有2種戰場: p=10有9種戰場: 要求輸出方案總

湖南省六屆大學生計算機程式設計競賽 弟弟的作業

你的弟弟剛做完了“100以內數的加減法”這部分的作業,請你幫他檢查一下。每道題目(包括弟弟的答案)的格式為a+b=c或者a-b=c,其中a和b是作業中給出的,均為不超過100的非負整數;c是弟弟算出的答案,可能是不超過200的非負整數,也可能是單個字元"?",表示他不會算

湖南省六屆大學生計算機程式設計競賽 戰場的數目

戰場的數目   在上題中,假設戰場的圖形周長為p,一共有多少種可能的戰場? 例如,p<8時沒有符合要求的戰場,p=8時有2種戰場: p=10有9種戰場: 要求輸出方案總數模987654321的值。 Input輸入檔案最多包含25組測試資料,每個資料僅包含

湖南省十屆大學生計算機程式設計競賽:酷酷的單詞

1505: 酷酷的單詞 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 237 Solved: 88 [Submit][Status][Web Board] Description 輸入一些僅由小寫字母

湖南省六屆大學生計算機程式設計競賽__弟弟的作業

#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; int chang

湖南省十二屆大學生計算機程式設計競賽 2016

1803: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 537  Solved: 343 [Submit][Status][Web

湖南省十屆大學生計算機程式設計競賽:殘缺的棋盤

1511: 殘缺的棋盤 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 169 Solved: 56 [Submit][Status][Web Board]Description] Input 輸入

CSU 1112 機器人的指令 (湖南省八屆大學生計算機程式設計競賽

1112: 機器人的指令     Time Limit: 1 Sec    Memory Limit: 128 Mb    Submitted: 2335    Solved: 841  

2017年湖南省十三屆大學生計算機程式設計競賽-D Tian Ji's Horse Race Again

思路:貪心。對於King的馬a[n]和Tian的馬b[n],交換的k匹馬,肯定是取a[n]的最大值和b[n]的最小值交換,那麼對於a[],b[]的比較排列是固定的,因此主要怎麼求贏得次數,由於a,b都是由小到大排序的,因此可以先求出對於b[i]至少要交換多少匹馬才能夠