2.6数据结构与算法学习日记

洛谷P2386 放苹果

题目描述

把 m 个同样的苹果放在 n 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。(5,1,15,1,1 和 1,1,51,1,5 是同一种方法)

输入格式

第一行是测试数据的数目 t,以下每行均包括二个整数 m和 n,以空格分开。

输出格式

对输入的每组数据 �m 和 �n,用一行输出相应的结果。

输入输出样例

输入 #1复制

1
7 3

输出 #1复制

8

输入 #2复制

3
3 2
4 3
2 7

输出 #2复制

2
4
2

说明/提示

对于所有数据,保证:1≤m,n≤10,0≤t≤20。

题目分析

对于这个题目在写递归函数时注意考虑几个条件

1,苹果小于盘子数时,苹果大于等于苹果数时,苹果等于0或盘子等于0时

2,m个苹果小于n个盘子数下一次调用时应该只需要考虑m个盘子

3,当苹果大于等于盘子数时,应该考虑每个盘子装一个苹果(下一次苹果数目就是m-n)的情况和空盘子的情况(盘子数减一)

代码示例

#include
using namespace std;
int ans[10000];
int jud(int a,int p){
     if(a==0||p==1||a==1)return 1;//当越界时直接返回
     if(a=p){return jud(a-p,p)+jud(a,p-1);}//当苹果数大于或等于盘子时开始考虑俩种情况(一种是目前所有盘子都放一个苹果,另一种是空出一个盘子然后剩下的盘子来装苹果)
             
}
int main(){

   int t,m,n,j=1;
   cin>>t;
   for(int i=1;i<=t;i++)
   {
       cin>>m>>n;
       ans[i]=jud(m,n);//存入答案数组
   }
  for(int k=1;k<=t;k++ )

  { cout<

洛谷P2759 奇怪的函数

题目描述

使得 x的x次方达到或超过n 位数字的最小正整数 x 是多少?

输入格式

一个正整数 n。

输出格式

使得 x的x次方达到 n 位数字的最小正整数 x。

输入输出样例

输入 #1复制

11

输出 #1复制

10

说明/提示

对于全部数据1≤n≤2×109。

题目分析

1,求整数m的位数公式

[lg(m)]+1([ ]表示向下取整,lg即为log10)利用对数的运算法则,lg(x^x)=x* lg(x),

2,题中n小于2乘10的9次方,所以此处得开long long,如果用普通的查找那肯定会超时,这时得考虑用二分的方法

3如果求出来的数小于mid则r=吗,否则l=m+1

代码示例

#include
using namespace std;
int n,l=1,r=2e9,m;//从n的最大范围开始找
int main()
{
    cin>>n;
    while(lm*log10(m)+1)l=m+1;//改变左边界
        else r=m;//改变右边界


    }
    cout<

你可能感兴趣的:(学习)