#arrays #c #loops #for-loop
#массивы #c #циклы #for-цикл
Вопрос:
Я создаю программу, которая выясняет, сколько n-образных полигонов на плоскости xy может пересекаться линией, параллельной оси y, я обнаружил, что могу просто рассматривать полигоны как линию на оси x с ограничениями от наименьшего значения x до наибольшегозначение x. Моя проблема здесь в том, что координаты могут доходить до 10 ^ 5, и у меня возникают проблемы с определением минимального значения x для каждого полигона. Я проверил, и я думаю, что это уже корректно, но всегда выводится, что минимальное значение x равно 0.
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long bangun, sisi, i, j, k, l, count=0, c1=0, countmax=0, bs;
long long max=0;
double x;
long long arrx[1009][1009]={0}, arrxmax[1000]={0}, arrxmin[1000]={10000000};
scanf("%d", amp;bangun);
for(i=0;i<bangun;i ){
scanf("%d", amp;sisi);
for(j=0;j<sisi;j ){
scanf("%lld", amp;arrx[i][j]);
scanf("%d", amp;bs);
}
}
//give value to arrxmax[i] amp; arrxmin[i] for polygon i
for(i=0;i<bangun;i ){
for(j=0;j<sisi;j ){
if(arrx[i][j] > arrxmax[i]){
arrxmax[i] = arrx[i][j];
}
//this is the part to find the minimum value
if(arrxmin[i] > arrx[i][j]){
arrxmin[i] = arrx[i][j];
}
}
}
printf("%dn", arrxmin[0]);
//finding the largest x of all polygons
for(i=0;i<bangun;i ){
if(arrxmax[i]>max){
max = arrxmax[i];
}
}
for(x=0;x<=max;x =0.3){
count = 0;
for(i=0;i<bangun;i ){
if(x<arrxmax[i] amp;amp; x>arrxmin[i]){
count ;
c1 = count;
}
if(c1>countmax){
countmax = c1;
}
}
}
printf("%d", countmax);
return 0;
}
Комментарии:
1. Какие входные данные вы используете для проверки этого? Какой результат вы ожидаете от этого ввода? Рассматривали ли вы возможность пошагового выполнения в отладчике, чтобы посмотреть, что происходит?
2. Независимо от алгоритма, вы, похоже, используете слишком много места в стеке (> 8 МБ). Если стек не был явно настроен на такие размеры, вам следует вернуться к динамическому распределению памяти или ожидать повреждения памяти и сбоев
3. @RetiredNinja 1 3 21500 500 23500 500 22500 3000, я ожидал 21500, поскольку он самый маленький, но я получил 0 как наименьший. 0 здесь не вывод программы, а вывод, когда я хочу напечатать arrxmin[0]
4. @SomeWittyUsername На данный момент это все, что я могу сделать, потому что я все еще не очень далеко продвинулся в программировании
5. Я не хочу быть тупым, но этот подход неприемлем. Без устранения проблемы, о которой я упоминал, нет смысла исправлять алгоритм