【數學】買不到的數目

小明開了一家糖果店。

他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。

糖果不能拆包賣。

小朋友來買糖的時候,他就用這兩種包裝來組合。

當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。

你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。

大於17的任何數字都可以用4和7組合出來。

本題的要求就是在已知兩個包裝的數量時,求最大不能組合出的數字。

輸入格式

兩個正整數 n,mn,m,表示每種包裝中糖的顆數。

輸出格式

一個正整數,表示最大不能買到的糖數。

數據範圍

2≤n,m≤1000
保證數據一定有解。

輸入樣例:

4 7

輸出樣例:

17

 

分析:

由題目的意思可以把思路往最大公約數上靠攏。很顯然當兩個數不互質時,由於最大的無法表示的數->無窮,所以必然不存在最大的無法表示的數(想想高數裏的極限,趨向於無窮相當於不存在)。而只有當兩數互質,才存在。

做法:

本題主要在於推導公式發現規律,代碼較爲簡單,這也是推導公式這一類型數學題目的慣常樣式。若一開始很難找出規律,可以試着打表(所謂打表就是利用暴力的方法在一定的範圍內打出足夠多的樣例,通過這些樣例推導公式,尋找規律,暴力搜索可以作爲打表的利器,n重循環看似無腦有時候往往不好寫,搜索寫熟練了就會發現搜索也挺無腦的)。打完表利用對稱的性質可以推出(n-1)(m-1)-1。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>

using namespace std;

bool dfs(int x,int p,int q)
{
    if(!x) return true;
    if(x >= p && dfs(x-p,p,q)) return true;
    if(x >= q && dfs(x-q,p,q)) {return true;}
    return false;
}

int main()
{

    int m,n;
    cin>>n>>m;
   cout<<(n-1)*(m-1) -1;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章