一行,包含一个数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);
}
}