1

Тема: Алготестер. Їдальня. С++ і Java

https://www.algotester.com/uk/ArchivePr … File/40746
Доброго дня. Зробив задачу на С++ і вирішив повторити розв'язок на Java. Програми ідентичні, але відповіді виводять різні. Допоможіть знайти помилки.

#include <iostream>

using namespace std;


main ()
{
  int n;
  cin >> n;
  string name[n];
  int weight[n];
  for (int i = 0; i < n; i++){
      cin >> name[i];
      cin >> weight[i];
    }
  int k, S = 0;

  for (int i = 0; i < n; i++){
      if (name[i] != "*") k = weight[i];
      for (int j = i + 1; j < n; j++){
      if (name[i] == name[j] && (name[i] != "*"))
        {
          name[j] = "*";
          if (weight[j] > k)    k = weight[j];
        }
    }
      if (name[i] != "*")    S += k;
    }
  cout << S;
  return 0;
}
package com.company;

import java.util.Scanner;


public class Main {

    public static void main(String[] args) {
        int n;
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        String name[] = new String[n];
        int weight[] = new int[n];
        for (int i = 0; i < n; i++) {
            name[i] = in.next();
            weight[i] = in.nextInt();
        }
        int k=0,S=0;
        for (int i=0;i<n;i++){

            if(name[i] != "*") k = weight[i];
            for (int j=i+1;j<n;j++){
                if((name[i]==name[j]) && (name[i]!="*")){
                    name[j] = "*";
                    if(weight[j]>k) k = weight[j];

                }
            }
            if (name[i]!="*") S+=k;
        }
    System.out.println(S);
    }
}

Наприклад, якщо ввести 3 p 4 p 4 p 4, то перша програма виведе 4, а друга 12.

2

Re: Алготестер. Їдальня. С++ і Java

ну, як мінімум скобки перевір

Подякували: zxzpogoncuk1

3

Re: Алготестер. Їдальня. С++ і Java

Вона компілюється, тому помилка не в цьому

4 Востаннє редагувалося koala (28.05.2020 13:13:41)

Re: Алготестер. Їдальня. С++ і Java

У Java == для об'єктів означає, що це той самий об'єкт (фактично порівнюються вказівники на об'єкти), тому порівняння стрічок всюди дає false (!=, відповідно, true).
Замініть всі порівняння стрічок у Java на equals:

if(!name[i].equals("*"))

і т.д.

Ну і дуже бажано вирівняти весь код, а також перевірку name[i]!="*" робити один раз в циклі. Без цієї перевірки там жодна дія не виконається.

Подякували: zxzpogoncuk1

5 Востаннє редагувалося koala (28.05.2020 16:16:42)

Re: Алготестер. Їдальня. С++ і Java

Ну і так, до речі, ця задача на Python:

from collections import defaultdict
n = int(input())
d = defaultdict(int)
for _ in range(n):
    name, count = input().split()
    d[name] = max(d[name], int(count))
return sum(d.values())
Подякували: zxzpogoncuk, leofun01, Eff1c3