一行,包含一个数N。
一行,包含一个数,表示最少收到的硬币数。
200
17
花200,需要找零824块,找12个64元硬币,3个16元硬币,2个4元硬币即可。
对于100%的数据,。
import java.util.Scanner; public class Main { public static void main(String[] args) { // 输入 Scanner scan = new Scanner(System.in); while (scan.hasNext()){ // 计算需要组成多少钱 int num = 1024 - scan.nextInt(); // dp[i] 状态定义为找i元钱,需要的最少张数,从 0 - num 总共 num + 1种 int[] dp = new int[num + 1]; // 初始化dp数组,因为要找最小值,这里给每个位置赋最大值,即都是由1元组成的,即num/1 for (int i = 0; i < dp.length; i++) { dp[i] = i; } // 定义钱的集合,方便遍历 int[] money = {1, 4, 16, 64}; // 状态转移方程 从 1 ~ num for (int i = 1; i <= num ; i++) { // dp[num]的最小值就是能组成它的前一步 + 1 和 本身进行比较 for (int j = 0; j < money.length; j++) { if (i - money[j] >= 0){ dp[i] = Math.min(dp[i - money[j]] + 1, dp[i]); } } } System.out.println(dp[num]); } } }
#include <bits/stdc++.h> using namespace std; // 因为有面值 1 元, 所以可以用贪心 #define N 1024 int main() { int n; while (cin >> n) { n = N - n; int ans = 0; int p = 64; while (n != 0) { ans += n / p; n %= p; p >>= 2; } cout << ans <<endl; } return 0; }
#include <stdio.h> int main(){ int N,b=64,num=0; scanf("%d",&N); N=1024-N; while(N>0){ num+=N/b; N%=b; b/=4; } printf("%d\n",num); return 0; }
int N; int coins[] = { 64,16,4,1 }; int minCoins(int n) { int res = 0; int i = 0; while (n) { if (n >= coins[i]) { res += n / coins[i]; n %= coins[i++]; } else { i++; } } return res; } int main(){ cin >> N; N = 1024 - N; cout << minCoins(N) << endl; return 0; }
import java.util.Scanner; //java.util为包名,Scanner为类名 public class Main { public static void main(String[] args) // 切莫少了传入参数 { Scanner input = new Scanner( System.in ); //使用前先导入Scanner类 int N = input.nextInt(); //next() 为方法 input.close(); int Z = 1024-N; int n64 = Z/64; int S = Z-64*n64; // *不能少,和数学里的带分数的单项式不同 int n16 = S/16; S = S-16*n16; //切莫重复定义,应用之前剩下的来减 int n4 = S/4; S = S-4*n4; int NS = n64+n16+n4+S; System.out.println( NS ); //输出语句切莫和C语言搞混 } }
#include <stdio.h> int main(){ int input, r, a, b, c; scanf("%d", &input); r = 1024 - input; a = r / 64; r = r % 64; b = r / 16; r = r % 16; c = r / 4; r = r % 4; printf("%d", a+b+c+r); }Python:
r = 1024-int(input()) a,r = divmod(r, 64) b,r = divmod(r, 16) c,r = divmod(r, 4) print(a+b+c+r)
import java.util.*; public class Main{ public static void main(String[]args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = 1024-sc.nextInt(); int[]coins={1,4,16,64}; int max=n+1; int[]dp=new int[max+1]; Arrays.fill(dp,max); dp[0]=0; for(int i=1;i<=n;i++){ for(int coin:coins){ if(i>=coin)dp[i]=Math.min(dp[i],dp[i-coin]+1); } } System.out.println(dp[n]); } } }
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner input = new Scanner(System.in); int N = input.nextInt(); int n = 1024 - N; int n1 = n/64; int n2 = n%64/16; int n3 = n%64%16/4; int n4 = n%64%16%4/1; int sum = n1+n2+n3+n4; System.out.println(sum); } }