Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Demagnetizare (minimala) ori ba?

Cum pot sa vad pe un proiector pr...

Joc Drone

Dropshipping
 Sfat achizitie AC Gree Fairy vs P...

MONITOR LG fara sonor !

Batalia pentru Bucuresti - ND, Fi...

Identificare font
 problema ping in jocuri online

Problema calculator

Samsung Galaxy A35

Sfat pentru aprinderea automata a...
 Rfg crescut

Cum reactivez Google Maps?

Conectare tableta X220la Tv

Femeile tinere nu mai vor sa munc...
 

Intersectia a doua intervale c++

- - - - -
  • Please log in to reply
26 replies to this topic

#19
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016

View Postjobist, on 08 decembrie 2017 - 22:02, said:

Mda; codul din postul #1 nici nu l-ai compilat! Cine e B  din if?
Probabil b mic.
Dar da este o eroare si C++ este case-sensitive!

#20
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016
Am implementat asta:
/*
* Created by SharpDevelop.
* User: Mihai
* Date: 12/8/2017
* Time: 10:24 PM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace IntersectieIntervale
{
class Program
{
  public static void Main(string[] args)
  {
  
   int[] intervale = new int[4];
   int NumarDeIntervale = intervale.Length/2;
  
   // intervalul 1:
   intervale[0] = 1;
   intervale[1] = 5;
  
   // intervalul 2:
   intervale[2] = 5;
   intervale[3] = 40;
  
   // pentru fiecare interval:
   for (int i=0;i<NumarDeIntervale;i++)
   {
  
   int start = intervale[i*2+0];
   int sfarsit = intervale[i*2+1];
  
   for (int j=0;j<NumarDeIntervale;j++)
   {
  
   if (i==j) continue;  // ca sa nu verificam intervalul cu el insusi
  
   int start_nou = intervale[j*2+0];
   int sfarsit_nou = intervale[j*2+1];
  
   if (start_nou>=start&&start_nou<=sfarsit)
   {
   int IndexMargine = 0;  // start_nou
   int NumarInterval1 = i+1;
   int NumarInterval2 = j+1;
   int IntersectieIn = start_nou;
   }
  
   if (sfarsit_nou>=start&&sfarsit_nou<=sfarsit)
   {
   int IndexMargine = 1;  // sfarsit_nou
   int NumarInterval1 = i+1;
   int NumarInterval2 = j+1;
   int IntersectieIn = start;
   }
  
   }
  
   
   }
  }
}
}

Nu verifica de duplicate!

#21
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
https://en.wikipedia...i/Interval_tree

#22
CasCas05

CasCas05

    New Member

  • Grup: Junior Members
  • Posts: 9
  • Înscris: 03.12.2017
Un program foarte simplu ar fi asta dar se putea face si cu vectori:
#include <iostream>
using namespace std;
int main()
{
	int minn,maxx=0,n,i,a,b,aux,j;
	cin >> n;
	for(i=1;i<=n;i++)
	{
		cin >> a;
		cin >> b;
		if(a>B)
		{
			aux=a;
			a=b;
			b=aux;
		}
		if(a>maxx)
			maxx=a;
		if(b<minn)
		minn=b;
	}
	cout << maxx << " " << minn;
	return 0;
}


Oricum fata de cel al lui IvanMihai este mult mai simplu.

#23
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
Scrie si ceva cod de test. Bagi vreo 10 intervale direct in cod (nu citite cu cin) alaturi de ce te astepti sa rezulte la intersectia lor, si compari ce te astepti sa rezulte cu ce rezulta apeland codul tau.

#24
CasCas05

CasCas05

    New Member

  • Grup: Junior Members
  • Posts: 9
  • Înscris: 03.12.2017

View Postdani.user, on 09 decembrie 2017 - 10:16, said:

Scrie si ceva cod de test. Bagi vreo 10 intervale direct in cod (nu citite cu cin) alaturi de ce te astepti sa rezulte la intersectia lor, si compari ce te astepti sa rezulte cu ce rezulta apeland codul tau.
Da ai dreptate

#25
navistar_eagle

navistar_eagle

    Member

  • Grup: Members
  • Posts: 958
  • Înscris: 16.11.2017

View PostOriginalCopy, on 08 decembrie 2017 - 21:45, said:

Liniile 1-4 definesc acele n intervale de numere (pe care tu vrei sa le citesti de la tastatura),

linia 6: incepe algoritmul cu intervalul de la minus infinit la infinit ca intersectie

liniile 10-14: itereaza fiecare interval din intervals, si pentru fiecare interval, fa acele copieri de date daca se intrunesc acele conditii

PS: = e o copiere de date
de fapt el trebuie sa faca in c++  codul din spatele functiilor pe care le-ai scris in python.Acolo e problema lui

Pentru intiator: pe baza segmentelor puse de dany , se observa cu usurinta urmatorul pattern: 2,5,10,15
Adica daca  punem intr-un vector v, capetele de intervale (asa cum sunt introduse) si  testam ca acest vector este sortat crescator, atunci
intotdeauna intersectia celor doua intervale va fi intre v[1] si v[2] ( adica intre 5 si 10, in cazul de mai sus)
Daca testarea vectorului esueaza (adica captele intervalelor nu formeaza un vector sortat crescator) intunci nu ai intersectie.

PS: considera vectorul de mai sus dat ca rezultaltul "lipirii" intervalellor date: (a,B)(c,d) => a,b,c,d si apoi aplica ideea de mai sus
bafta

Edited by navistar_eagle, 09 December 2017 - 10:39.


#26
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016

View PostCasCas05, on 09 decembrie 2017 - 10:01, said:

Un program foarte simplu ar fi asta dar se putea face si cu vectori:
#include <iostream>
using namespace std;
int main()
{
int minn,maxx=0,n,i,a,b,aux,j;
cin >> n;
for(i=1;i<=n;i++)
{
	 cin >> a;
	 cin >> b;
	 if(a>B)
	 {
		 aux=a;
		 a=b;
		 b=aux;
	 }
	 if(a>maxx)
		 maxx=a;
	 if(b<minn)
	 minn=b;
}
cout << maxx << " " << minn;
return 0;
}


Oricum fata de cel al lui IvanMihai este mult mai simplu.

Pai cred ca nu am inteles ce vrei tu sa faci...
Codul meu calculeaza unde se intersecteaza doua intervale.
Codul tau calculeaza limita inferioara si limita superioara din toate intervalele
- calculeaza minimul si maximul.

Utilizeaza struct pentru a Interval ceva de genul:
class Program
{

  public struct Interval
  {

   public int start;
   public int sfarsit;
	
  }


  public static void Main(string[] args)
  {
 
			Console.WriteLine("Introdu numarul de intervale:"); // Prompt
			int NrDeIntervale = Convert.ToInt32(Console.ReadLine()); // Get string from
		  
			Interval[] intervale = new Interval[NrDeIntervale];
			for (int i=0;i<NrDeIntervale;i++)
			{
			Console.WriteLine("Introdu startul intervalului:"); // Prompt
			intervale[i].start = Convert.ToInt32(Console.ReadLine()); // Get string from
		  
			Console.WriteLine("Introdu sfarsitul intervalului:"); // Prompt
			intervale[i].sfarsit = Convert.ToInt32(Console.ReadLine()); // Get string from
			}		  
  }




#27
CasCas05

CasCas05

    New Member

  • Grup: Junior Members
  • Posts: 9
  • Înscris: 03.12.2017

View PostIvanMihai, on 09 decembrie 2017 - 11:56, said:


Pai cred ca nu am inteles ce vrei tu sa faci...
Codul meu calculeaza unde se intersecteaza doua intervale.
Codul tau calculeaza limita inferioara si limita superioara din toate intervalele
- calculeaza minimul si maximul.

Utilizeaza struct pentru a Interval ceva de genul:
class Program
{

public struct Interval
{

public int start;
public int sfarsit;
	
}


public static void Main(string[] args)
{

		 Console.WriteLine("Introdu numarul de intervale:"); // Prompt
		 int NrDeIntervale = Convert.ToInt32(Console.ReadLine()); // Get string from
		
		 Interval[] intervale = new Interval[NrDeIntervale];
		 for (int i=0;i<NrDeIntervale;i++)
		 {
		 Console.WriteLine("Introdu startul intervalului:"); // Prompt
		 intervale[i].start = Convert.ToInt32(Console.ReadLine()); // Get string from
		
		 Console.WriteLine("Introdu sfarsitul intervalului:"); // Prompt
		 intervale[i].sfarsit = Convert.ToInt32(Console.ReadLine()); // Get string from
		 }		
}


Da, oricum am rezolvat

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate