Форум программистов, компьютерный форум CyberForum.ru

Некорректный вывод - C++

Восстановить пароль Регистрация
 
Tripolis
1 / 1 / 1
Регистрация: 21.03.2013
Сообщений: 10
09.06.2013, 23:37     Некорректный вывод #1
Проблема очень странная, впервые с таким сталкиваюсь. Итак, вводятся сначала 3 числа через пробел (кол-во вводов, ширина открытки и высота) потом n-е кол-во раз вводятся ширина и высота конверта. Вывести нужно сначала кол-во конвертов, в которые влезет открытка, а потом их номера в порядке возрастания размера.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
 
 
using namespace std;
 
struct convert{
unsigned long long int s, w, h, index;
};
 
 void quickSortR(convert* a, long N) {
  long i = 0, j = N;
  convert temp, p;
  p = a[ N>>1 ];
  do {
    while ( a[i].s < p.s ) i++;
    while ( a[j].s > p.s ) j--;
 
    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
  if ( j > 0 ) quickSortR(a, j);
  if ( N > i ) quickSortR(a+i, N-i);
}
 
int main(){
long long int n, w, h, tr = 0; //n - кол-во вводов. w - ширина  h - высота открытки tr - кол-во конвертов, в которые влезает открытка
cin >> n >> w >> h;
convert Convert[n];
int index[n], del = 0;
for(int i = 0; i < n; i++){
    cin >> Convert[i].w >> Convert[i].h;
    Convert[i].s = Convert[i].w*Convert[i].h;
    if(Convert[i].w > w & Convert[i].h > h) {
            Convert[i].index = i + 1;
            } else {
            Convert[i].index = 0;
            }
}
 
quickSortR(Convert, n);
for(int i = 0; i < n; i++){
    if(Convert[i].index == 0) continue;
    if(Convert[i].w > w & Convert[i].h > h){
       w = Convert[i].w;
       h = Convert[i].h;
       index[tr] = Convert[i].index;
        if(Convert[i+1].w == w & Convert[i+1].h == h) index[tr]--;
       tr++;
       }
}
cout << tr <<endl;
if(tr != 0){
for(int i = 0; i < tr; i++){
cout << index[i] <<" ";
}
}
for(int i = 0; i < n; i++){
        cout << '\0';
}
}
Собственно проблема : если вводить эти числа
2 6134 8495
9045 8632
9000 9000
программа выдаст
1
1
а должна
2
1 2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 23:37     Некорректный вывод
Посмотрите здесь:

некорректный вывод результата C++
C++ Некорректный вывод в Borland 3.1
некорректный вывод программы C++
C++ Некорректный вывод
Некорректный вывод C++
C++ Некорректный вывод в файл
C++ Некорректный вывод значений
Некорректный вывод в файл C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
10.06.2013, 13:29     Некорректный вывод #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
 
struct convert
{
    int long long size, width, height;
public:
    convert()
    {
        size = width = height =0;
    }
};
 
void sort(convert *obj,int *buffer, int size)
{
    int x,y;
    for( int i=0; i+1!=size; i++ )
    {
        for( int i=0; i+1!=size; i++ )
        {
            x = buffer[i];
            y = buffer[i+1];
            if(obj[buffer[i]].size > obj[buffer[i+1]].size)
            {
                buffer[i] = y;
                buffer[i+1] = x;
            }
        }
    }
}
 
int main()
{
    int n, width, height,match, *index;
    match = 0;
 
    std::cout<<"Please enter num, width, height: ";
    std::cin>>n>>width>>height;
    convert obj[n];
 
    int size = width * height;
    index = new int[n];
 
    for( int i=0; i!=n; i++)
    {
        std::cout<<"Please choose width & height: ";
        std::cin>>obj[i].width>>obj[i].height;
        obj[i].size = obj[i].width * obj[i].height;
    }
 
    for ( int i=0; i!=n; i++)
    {
        if( obj[i].size <= size )
        {
            std::cout<<"bingo\n";
            index[i] = i;
            match++;
        }
    }
    std::cout<<"Match: "<<match<<std::endl;
 
    std::cout<<"before: ";
    for(int i=0; i!=n; i++)
    {
        std::cout<<obj[index[i]].size<<' ';
    }
 
    sort(obj,index, n);
 
    std::cout<<"\nAfter: ";
    for(int i=0; i!=match; i++)
    {
        std::cout<<obj[index[i]].size<<' ';
    }
 
    return 0;
}
P.S: С чего ты взял что эти подойдут?
2 6134 8495: num =2; size = 52 108 330
9045 8632: size = 78 076 440
9000 9000: size = 81 000 000

Это явно больше твоего размера
Tripolis
1 / 1 / 1
Регистрация: 21.03.2013
Сообщений: 10
10.06.2013, 18:19  [ТС]     Некорректный вывод #3
Pakisan, usigned long long int переменная 64-х битная, там все вместится
Yandex
Объявления
10.06.2013, 18:19     Некорректный вывод
Ответ Создать тему
Опции темы

Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru