小明去附近的水果店买橙子,水果商贩只提供整袋购买,有每袋6个和每袋8个的包装(包装不可拆分)。可是小明只想购买恰好n个橙子,并且尽量少的袋数方便携带。如果不能购买恰好n个橙子,小明将不会购买。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); flag:{if(n%8==0){ System.out.println(n/8); }else{ for(int i=n/8;i>=0;i--){ int x=n-i*8; if(x>=6&&x%6==0){ System.out.println(i+x/6); break flag; } } System.out.println(-1); } } } }
#include<iostream> using namespace std; int main(){ int n; cin>>n; if(n%2!=0||n<6) cout<<-1; else{ int min=100; for(int i=0;i<13;i++){ for(int j=0;j<17;j++){ if(8*i+6*j==n) min=i+j; } } cout<<min<<endl; } }
#include <bits/stdc++.h>using namespace std;int main () { int n; cin >> n; for (int i=0; i<=17; ++i) { for (int j=0; j<=13; ++j) { if (6 * i + 8 * j == n) { cout << i + j << endl; return 0; } } } cout << -1 << endl; return 0;}
import java.util.*; public class Main { public static final int MAX = 105; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] bags = {6, 8}; int[] dp = new int[MAX]; for (int i=0; i!=bags.length; i++) { dp[bags[i]] = 1; } Arrays.fill(dp, -1); dp[0] = 0; for (int i=1; i<=n; i++) { for (int j=0; j<bags.length; j++) { if (i - bags[j] >= 0 && dp[i - bags[j]] > -1) { if (dp[i] == -1 ) { dp[i] = dp[i - bags[j]] + 1; }else { dp[i] = Math.min(dp[i], dp[i - bags[j]] + 1 ); } } } } System.out.println(dp[n]); return; } }
package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) ans:=-1 var dfs func(int,int) dfs=func(sum int,cnt int){ if sum>=n{ if sum==n{ if ans==-1{ ans=cnt }else if ans>cnt{ ans=cnt } } return } dfs(sum+8,cnt+1) dfs(sum+6,cnt+1) } dfs(0,0) fmt.Print(ans) }
#include <stdio.h> #include <iostream> using namespace std; int main() { int orange_n,j,find; cin>>orange_n; int bag_n=65535; find=0; for(int i=0;i*6<=orange_n;i++) //包装A买的袋数 { if((orange_n-i*6)%8==0) //刚好放完 { j=(orange_n-i*6)/8; //包装b买的袋数 bag_n=(bag_n<(i+j))?bag_n:(j+i); //求当前方案是否是最小袋数 find=1; // 找到了可行方案 } } if(find) { cout<<bag_n<<endl; } else cout<<-1<<endl; //没找到可行方案 }
#include<bits/stdc++.h> using namespace std; int n,dp[105]; //dp[i]表示买i个橘子最少需要的袋数 int main(){ //dp[i]=min(dp[i-6],dp[i-8])+1 memset(dp,0,sizeof(dp)); cin >> n; dp[0] = 0; for(int i = 1;i <= n;i++){ if(i<6||i==7){ dp[i] = 0xffffff; //不可能用袋子买到这样的橘子 continue; } dp[i] = min(dp[i-6],dp[i-8])+1; //状态转移 } if(dp[n]>=0xfffff) cout << -1; else cout << dp[n]; return 0; }
#include<stdio.h> #include<iostream> using namespace std; int main() { int i, j, n, p, m=0; cin >> n; for (i = 0; i < 17; i++) { for (j = 0; j < 13; j++) { p = 6 * i + 8 * j; if (p == n) { m = i + j; cout << m << endl; return 0; } } } cout << "-1" << endl; return 0; }
#include <iostream> #include <string> #include <climits> using namespace std; int num, minLength = INT_MAX; void dfs(int n, string pre) { string cur1, cur2; if(n > num){ pre = ""; return; } if(n == num){ //cout << pre << " "; if(pre.size() < minLength) minLength = pre.size(); return; } cur1 = pre + "6"; dfs(n + 6, cur1); cur2 = pre + "8"; dfs(n + 8, cur2); } int main() { cin >> num; dfs(0, ""); minLength != INT_MAX ? cout << minLength << endl: cout << -1 << endl; return 0; }
public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int count = -1; if((n%8)%2==0){ if((n%8)==0){ count = n/8; }else if(n%8 == 6){ count = n/8+1; }else if(n/8>=(6-n%8)/2){ count = n/8+1; } } System.out.println(count); return; } }
#include<iostream> using namespace std; int main() { int n; cin>>n; if(n%2||n<6) { cout<<-1<<endl; return 0; } if(n%8==0) { cout<<n/8<<endl; return 0; } for(int c=n/8;c>=0;c--) { if((n-8*c)%6==0) { cout<<c+(n-8*c)/6<<endl; return 0; } } cout<<-1<<endl; return 0; }
import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if(n % 2 != 0 || n == 10) { System.out.println(-1); }else { int result2 = 0; if(n % 8 != 0) { result2 = n / 8 + 1; } else { result2 = n / 8; } System.out.println(result2); } } }如此简单,只需要看,8的整数倍整除即可,不是整数倍加1,因为最后面的可以用6来代替8