在预定义的数字之间分配用户输入[关闭]

问题描述 投票:0回答:3

我正在开发一个 Java 程序,该程序将用户输入分配给预定义的数字并相应地格式化输出。例如,如果用户输入 452,预定义值为 300、200、100 和 50,则程序应输出:“1x300、0x200、1x100、1x50,余数为 2。”

如何在Java中实现这种分配和格式化逻辑?

java algorithm
3个回答
2
投票

这个解决方案应该有效:

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]
运算符)。

最后,所有乘数将被正确设置,输入将等于余数


1
投票

通常,您应该向我们提供您尝试过的代码,以获得帮助。

所以我可以自由地以我的方式思考解决方案。

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());

}

0
投票

此代码适用于每个号码。

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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.