转 算法。

1,.N(1<=N<=9)个小熊分一堆苹果,第一只小熊将苹果分成N份,多了一个,扔掉,然后拿走自己的那一份。第二只熊将剩余的苹果分成N份,又多了一个,扔掉,然后拿走自己的那一份,第三只.....,直到第N只熊;问最初的苹果有多少个?

        public static int n =6;
        static void Main(string[] args)
        {
            for (int i = 15550; i <= Int32.MaxValue; i++)
            {
                if (solve(i*3+1))
                {
                    Console.WriteLine(n + " " + (i * 3 + 1));
                    break;
                }
            }
        }
        public static bool solve(int apple)
        {
            int b1 = (apple - 1) / 3;
            for (int i = 2; i < n + 1; i++)
            {
                if (!(((Math.Pow(n - 1, i - 1)) * (apple + n - 1)) % (Math.Pow(n, i)) == 0))
                { return false; }
            }
            return true;
        }

2.6*6的矩阵,从左上方开始,只经过向下或向右的步骤,到达右下方,找出经过的位置的最大价值; 200,120,400,150,180,300 150,250,360,120,200,130 350,300,250,100,500,260 100,150,260,320,100,150 500,130,260,100,200,170 160,100,250,200,600,200

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test2
{
    class Program
    {
        static void Main(string[] args)
        {
          int[][] value = new int[][] {new int[]{200,120,400,150,180,300},
               new int[] {150,250,360,120,200,130},
               new int[] {350,300,250,100,500,260},
               new int[] {100,150,260,320,100,150},
               new int[] {500,130,260,100,200,170},
               new int[] {160,100,250,200,600,200}};
              work(value);
            //show(value);
        }
     public static int work(int[][] value){
        int[][] maxValue = new int[][]{
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
        };
        int[][] path = new int[][]{
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
        };
        maxValue[0][0] = value[0][0];
        for (int i = 1; i < 6; i++) {
            maxValue[0][i] = value[0][i]+maxValue[0][i-1];
            path[0][i] =1;
        }
        for (int i = 1; i < 6; i++) {
            maxValue[i][0] = value[i][0]+maxValue[i-1][0];
            path[0][i] = 1;
        }
         
        for (int i = 1; i < 6; i++) {
            for (int j = 1; j < 6; j++) {
                maxValue[i][j] =Math.Max(maxValue[i-1][j], maxValue[i][j-1])+value[i][j];
                if (maxValue[i - 1][j] > maxValue[i][j - 1])
                { path[i][j] = 0; }
                else { path[i][j] = 1; }
            }
        }
        show(maxValue);
        Console.WriteLine();
        show(path);
        Console.WriteLine();
        showstr(path);
        return maxValue[5][5];
    }
        public static void show(int[][] mar)
        {
            foreach (int[] i in mar)
            {
                foreach (int x in i)
                {
                    Console.Write(x.ToString() + "  ");
                }
                Console.WriteLine();
            }
        }
        public static void showstr(int[][] mar)
        {
           int[][] path = new int[][]{
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
            new int[]{0,0,0,0,0,0},
        };
            mar[0][0] = 1; mar[5][5] = 1;
            int i = 5; int j = 5;
            while (true)
            {
                if (!(i == 0 & j == 0))
                {
                    if (mar[i][j] == 0)
                    {
                       path[--i][j] = 1;
                    }
                    else
                    {
                        path[i][--j] = 1;
                    }
                }
                else { break; }
            }
            show(path);
        }
    }
}

思路最上,最左向右累加,其他部分取上方左方最大,累加下去。

路径思路,上面向右设为1,向下设为0,在第二个矩阵里进值,路径自最右下开始按方向开始,本题左左左上上上上上左左。结果为矩阵三

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原 有一个demo想开去,程序员在写cod

    魂祭心
  • 原 WCF学习之旅----基础篇之Ente

    魂祭心
  • 原 结合源码分析 setTimeout /

    魂祭心
  • 华为面试题——一道关于指针方面的编程题(C/C++)

        int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数...

    用户1221057
  • 爱彼迎19年社招java面试题 求DAG图中每个点的祖先个数

    例如上图, 则H的祖先个数是3个(包括它自己哈),分别是和. 而N的祖先个数是4()。

    ACM算法日常
  • MFC中的下拉框ComboBox使用

    Combo Box (组合框)控件很简单,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一...

    acoolgiser
  • LeetCode 7. 整数反转

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    freesan44
  • 简易却高效的hashmap实现

    我们每天都在使用HashMap,有没有想过,在很多情景下,HashMap做的其实没有特别好,他是一个很通用的k-v数据结构,却不一定在各个小方面都适合.因此我们...

    呼延十
  • block-基础概念和使用

    block主要准备分为3个文章记录。 第一章:基础概念和使用 第二章:捕获变量 第三章:持有变量

    大壮
  • 【LeetCode第 177 场周赛】5169. 日期之间隔几天

    输入:date1 = "2019-06-29", date2 = "2019-06-30" 输出:1 示例 2:

    韩旭051

扫码关注云+社区

领取腾讯云代金券