我正在开发一个 Java 程序,该程序将用户输入分配给预定义的数字并相应地格式化输出。例如,如果用户输入 452,预定义值为 300、200、100 和 50,则程序应输出:“1x300、0x200、1x100、1x50,余数为 2。”
如何在Java中实现这种分配和格式化逻辑?
这个解决方案应该有效:
int[] values = {300, 200, 100, 50};
int[] multipliers = new int[values.length];
int input = 452;
for(int i = 0; i < values.length; ++i)
{
if(input < values[i])
{
continue;
}
else
{
multipliers[i] = input / values[i];
input = input % values[i];
// It will automatically be an integer because of implict conversion
}
}
for(int i = 0; i < multipliers.length; ++i)
{
System.out.println(multipliers[i]+"x"+values[i]);
}
System.out.println("Remainder is "+input);
假设值按降序输入,我们循环遍历
values
并将multiplier的每个元素设置为等于values[i]
可以除以输入的次数。然后我们将输入设置为 %
的余数(使用模 values[i]
运算符)。
最后,所有乘数将被正确设置,输入将等于余数
通常,您应该向我们提供您尝试过的代码,以获得帮助。
所以我可以自由地以我的方式思考解决方案。
public static void main(String[] args){
//should be in descending order
//key represents predef value
//value represents the count of predef value
Map<Integer, Integer> predefinedValues = new LinkedHashMap<>();
predefinedValues.put(300, 0);
predefinedValues.put(200, 0);
predefinedValues.put(100, 0);
predefinedValues.put(50, 0);
//get lowestPredef
int lowestPredef = 50;
//get input
int input = 655;
//iterate until input is higher than lowest
while(input > lowestPredef){
//iterate all predefined values
for(Map.Entry<Integer, Integer> entry : predefinedValues.entrySet()){
int key = entry.getKey();
int value = entry.getValue();
//find and stop at first lower value than input
if(input > key){
//substract that value from input
input -= key;
//count +1 for that value
predefinedValues.put(key, value + 1);
//break for-loop
break;
}
}
}
//build a string with result
StringBuilder result = new StringBuilder("");
for(Map.Entry<Integer, Integer> entry : predefinedValues.entrySet()){
result.append(entry.getValue())
.append("x")
.append(entry.getKey())
.append(", ");
}
result.append("with a remainder of ")
.append(input);
System.out.print(result.toString());
}
此代码适用于每个号码。
public static void main(String[] args) {
int value = 452;
Map<Integer, Integer> listofmultiples = new HashMap();
listofmultiples.put(300, 0);
listofmultiples.put(200, 0);
listofmultiples.put(100, 0);
listofmultiples.put(50, 0);
int lastKey = 0;
lastKey = (int) listofmultiples.keySet().toArray()[0];
int i = listofmultiples.size();
int valueforkey = 0;
while (value > lastKey) {
int key = (int) listofmultiples.keySet().toArray()[i - 1];
if (value > key) {
value %= key;
valueforkey += 1;
listofmultiples.put(key, valueforkey);
}
else{
i-=1;
valueforkey=0;
}
}
System.out.println(listofmultiples.toString());
System.out.println(value);
}