Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2019, 20:27   #1
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию Задача Число(не могу найти ошибку в решении)

Вася написал на длинной полоске бумаги большое число и решил похвастаться своему старшему брату Пете этим достижением. Но только он вышел из комнаты, чтобы позвать брата, как его сестра Катя вбежала в комнату и разрезала полоску бумаги на несколько частей. В результате на каждой части оказалось одна или несколько идущих подряд цифр.

Теперь Вася не может вспомнить, какое именно число он написал. Только помнит, что оно было очень большое. Чтобы утешить младшего брата, Петя решил выяснить, какое максимальное число могло быть написано на полоске бумаги перед разрезанием. Помогите ему!

Входные данные
Входной файл содержит одну или более строк, каждая из которых содержит последовательность цифр. Количество строк во входном файле не превышает 100, каждая строка содержит от 1 до 100 цифр. Гарантируется, что хотя бы в одной строке первая цифра отлична от нуля.
Выходные данные
Выведите в выходной файл одну строку - максимальное число, которое могло быть написано на полоске перед разрезанием.
Примеры
входные данные
2
20
004
66
выходные данные
66220004


входные данные
3
выходные данные
3
половину тестов проходит, остальные нет

Код:
#include <fstream>
#include <stdio.h>
#include <iostream>
#include<string>
#include<iomanip> 
#include <cstring>
#include<stdlib.h>

using namespace std;

void quick_sort(string a[], int left, int right)
{
	int i = left, j = right;
	string p;
	string temp;
	p = a[(left + right) / 2];
	do {
		while (a[i]+p < p+a[i]) i++;
		while (a[j]+p > p+a[i]) j--;
		if (i <= j) {
			temp = a[i]; a[i] = a[j]; a[j] = temp;
			i++; j--;
		}
	} while (i <= j);
	if (j > left) quick_sort(a, left, j);
	if (i < right) quick_sort(a, i, right);
}

int main() {
int number = 0;
string s1,s2;
	
	/*string* mass = new string[20000];*/
string mass[1000];

	ifstream file("input.txt");

	if (!file.is_open()) {
		cout << " error";
		return 0;
	}
	int n = 0;
	while (!file.eof()) {
		file >> mass[n];
		n++;
	}
    file.close();
	
	/*for (int i = 0; i < n; i++) cout << mass[i] << " ";*/
	/*cout << endl;*/
	quick_sort(mass, 0, n - 1);

	ofstream out("output.txt");
	

	for (int i = n-1; i > -1; i--) cout << mass[i];
	out.close();

	/*s1 = mass[0] + mass[1];
	s2 = mass[1] + mass[0];


	cout << atoi((s1+s2).c_str()) <<" "<< atoi(s2.c_str());*/


	
	
	system("pause");
	return 0;
}

Последний раз редактировалось Gud; 01.07.2019 в 20:31.
Gud вне форума Ответить с цитированием
Старый 01.07.2019, 21:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Gud Посмотреть сообщение
string mass[1000];
это избыточно. в задании n не может превышать 100

чувствую, что в сравнении строк кроется подвох.

и скажите, а что ваша программа выдаёт для таких входных данных:
Код:
02
020
04
1
и таких
Код:
02
020
4
1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.07.2019, 21:58   #3
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию

Возникло необработанное исключение по адресу 0x76085508 в Project122.exe: исключение Microsoft C++: std::length_error по адресу памяти 0x003B7B24.
Gud вне форума Ответить с цитированием
Старый 01.07.2019, 22:00   #4
Gud
 
Регистрация: 13.10.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это избыточно. в задании n не может превышать 100

чувствую, что в сравнении строк кроется подвох.

и скажите, а что ваша программа выдаёт для таких входных данных:
Код:
02
020
04
1
и таких
Код:
02
020
4
1
[QUOTE=Serge_Bliznykov;1786708]это избыточно. в задании n не может превышать 100


Возникло необработанное исключение по адресу 0x76085508 в Project122.exe: исключение Microsoft C++: std::length_error по адресу памяти 0x003B7B24.
Gud вне форума Ответить с цитированием
Старый 01.07.2019, 23:12   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,314
По умолчанию

У меня DevCPP.
На приведённых примерах программа работает правильно.
У меня ошибка возникала, если последняя строка файла input.txt не завершалась ENTER.
Пробовал операции сравнения строк как с "<" и ">", так и с strcmp().c_str() или strcmp.data().
Как-то так, ...

Последний раз редактировалось ViktorR; 02.07.2019 в 00:08.
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с массивами. Не могу найти ошибку _Лето_ Общие вопросы C/C++ 0 14.12.2013 19:03
Легкая задача в C++, не могу найти ошибку в коде. Aaaaaa111 Помощь студентам 3 20.02.2012 14:07
задача с матрицей,не могу найти ошибку. chaikovskaya Помощь студентам 1 30.12.2011 13:55
Задача про лабиринт. Не могу найти ошибку РагнаР Общие вопросы C/C++ 3 22.10.2010 22:28
Задача на ряд Тейлора - не могу найти ошибку _NooB_ Помощь студентам 0 30.09.2010 14:53