Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 例如,如果coins=[1,2,5]和N=11,则返回true;如果coins=[3,77]和N=100,则返回true_Objective C - Fatal编程技术网

Objective c 例如,如果coins=[1,2,5]和N=11,则返回true;如果coins=[3,77]和N=100,则返回true

Objective c 例如,如果coins=[1,2,5]和N=11,则返回true;如果coins=[3,77]和N=100,则返回true,objective-c,Objective C,在线等待~ 给定不同面额的硬币数量,例如[1,2,5],并测试它们是否可用于构成一定数量(N),假设您可以在每个面额中使用无限数量的硬币。例如,如果coins=[1,2,5]和N=11,如果coins=[3,77]和N=100,则返回true,返回方法是使用递归函数(在这里,它将使用第一个硬币与其他硬币数组进行计算,然后递归地减小硬币数组的大小) 但是我不熟悉Objective-C,所以我用C写了一个。使用时应将其转换为Objective-C bool CanDo(int n, int [] a

在线等待~


给定不同面额的硬币数量,例如[1,2,5],并测试它们是否可用于构成一定数量(N),假设您可以在每个面额中使用无限数量的硬币。例如,如果coins=[1,2,5]和N=11,如果coins=[3,77]和N=100,则返回true,返回

方法是使用递归函数(在这里,它将使用第一个硬币与其他硬币数组进行计算,然后递归地减小硬币数组的大小)

但是我不熟悉Objective-C,所以我用C写了一个。使用时应将其转换为Objective-C

bool CanDo(int n, int [] arr)  
{
    if (arr.Length == 1)
    {
        if (n % arr[0] == 0)
        {
            return true;
        }
    }
    else
    {
        var ls = new List<int>(arr);
        ls.RemoveAt(0);
        int [] newarr = ls.ToArray();    //Create New array by deleting first element(current calculated element) of old array

        for(int i = 0; i <= n/arr[0]; i++)
        {
            int next_n = n - i * arr[0];
            if (next_n == 0)
            {
                return true;
            }
            else if (next_n < 0)
            {
                break;
            }
            else if(next_n > 0)
            {
                if( CanDo(next_n, newarr) )
                {
                    return true;
                }
            }
        }
    }
    return false;
}
boolcando(int n,int[]arr)
{
如果(arr.Length==1)
{
如果(n%arr[0]==0)
{
返回true;
}
}
其他的
{
var ls=新列表(arr);
ls.RemoveAt(0);
int[]newarr=ls.ToArray();//通过删除旧数组的第一个元素(当前计算元素)创建新数组
对于(int i=0;i 0)
{
如果(坎多(下一个,纽瓦尔))
{
返回true;
}
}
}
}
返回false;
}
这是C#中的完整代码,可以打印到控制台中找到第一个解决方案

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

namespace ConsoleApplication1
{
    class Program
    {
        static List<string> resultString = new List<string>();
        static bool CanDo(int n, int [] arr)
        {
            if (arr.Length == 1)
            {
                if (n % arr[0] == 0)
                {
                    resultString.Add(n/ arr[0] + "*" + arr[0]);
                    return true;
                }
            }
            else
            {
                var ls = new List<int>(arr);
                ls.RemoveAt(0);
                int [] newarr = ls.ToArray();    //Create New array by deleting first element of old array

                for(int i = 0; i <= n/arr[0]; i++)
                {
                    if (resultString.Count > 0)
                    {
                        resultString.RemoveAt(resultString.Count - 1);
                    }

                    int next_n = n - i * arr[0];
                    if (next_n == 0)
                    {
                        resultString.Add(i + "*" + arr[0]);
                        return true;
                    }
                    else if (next_n < 0)
                    {
                        break;
                    }
                    else if(next_n > 0)
                    {
                        if (i != 0)
                        {
                            resultString.Add(i + "*" + arr[0] + " + ");
                        }
                        if( CanDo(next_n, newarr) )
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        static void Main(string[] args)
        {
            try
            {

                int[] arr = { 3, 5, 7 };
                int N = 20;
                resultString = new List<string>();

                if (CanDo(N, arr))
                {
                    resultString.ForEach(Console.WriteLine);
                    Console.Read();
                }
                else
                {
                    Console.Write("Can't do");
                    Console.Read();
                }

            }
            catch (Exception ex)
            {
                //handle exception
            }

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序1
{
班级计划
{
静态列表结果字符串=新列表();
静态布尔坎多(整数n,整数[]arr)
{
如果(arr.Length==1)
{
如果(n%arr[0]==0)
{
结果字符串添加(n/arr[0]+“*”+arr[0]);
返回true;
}
}
其他的
{
var ls=新列表(arr);
ls.RemoveAt(0);
int[]newarr=ls.ToArray();//通过删除旧数组的第一个元素来创建新数组
对于(int i=0;i 0)
{
resultString.RemoveAt(resultString.Count-1);
}
int next_n=n-i*arr[0];
if(next_n==0)
{
结果字符串Add(i+“*”+arr[0]);
返回true;
}
否则如果(下一个<0)
{
打破
}
else if(下一步>0)
{
如果(i!=0)
{
结果字符串.Add(i+“*”+arr[0]+“+”);
}
如果(坎多(下一个,纽瓦尔))
{
返回true;
}
}
}
}
返回false;
}
静态void Main(字符串[]参数)
{
尝试
{
int[]arr={3,5,7};
int N=20;
resultString=新列表();
如果(坎多(北,arr))
{
结果字符串ForEach(控制台WriteLine);
Console.Read();
}
其他的
{
控制台。写(“不能做”);
Console.Read();
}
}
捕获(例外情况除外)
{
//处理异常
}
}
}
}