webForumDet fria alternativet

Fylla collection med närliggande värden

Programmering

1 svar · 356 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1
int counter = 0; //Räknare, får högst bli 10
int increment = 2; //Stigningsgrad, kan var vad som helst
int current = 244; //Antal
int max = 1290; //Max antal
int min = 0; //Lägsta tal, alltid 0
List<int> list = new List<int>(); //En enkel collection

Vad jag vill göra är att fylla list med de 10 närmaste värderna utifrån current värdet.

Exempel:
Om current är 144 och increment är 2 så skall det bli.
134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154

Om current är 4 och increment är 2 så skall det bli.
2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22

Värdet får inte vara mindre än min eller högre än max.

Om current är 144 och increment är 2 och max är 150 så skall det bli.
130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150

Om current är 144 och increment är 2 och min är 140 och max är 150 så skall det bli.
140, 142, 144, 146, 148, 150

Lösningar kan vara i C++, Java, C# eller annat som påminner om dessa. Tacksam för alla fungerande förslag.

Medlem sedan nov. 200373 inlägg
#2

Här får du min lösning. Den är lång och snårig men borde fungera enligt din beskrivning.

public class a {

	public static void main(String[] args) {
		
		final int MAX = 10;
		int inc = 2;
		int current = 144;
		int min = 30;
		int max = 150;
		
		int from = 0;
		int to = 0;
		
		if(current < min){
			System.err.println("current < min");
		}
		else if(min < 0){
			System.err.println("min < 0");
		}
		else if(current > max){
			System.err.println("current > max");
		}
		else if(min > max){
			System.err.println("min > max");
		}
		else{
			if( (max - min) / inc > MAX){
				from = (current - min) / inc;
				to = (max - current) / inc;
				if(to > from)
					to = Math.max(MAX - from, MAX / 2);
				else
					from = Math.max(MAX - to, MAX / 2);
			}
			else{
				from = (current - min) / inc;
				to = (max - current) / inc;
				from = Math.min(from, MAX - to);
				to = Math.min(to, MAX - from);
				
			}
			int dif = from + to;
			
			if(dif > MAX){
				if(from > to)
					from = MAX - to;
				else
					to = MAX - from;
			}
			int sum = 0;
			for(int i = -from; i <= to; i++){
				int a = current + (inc * i);
				System.out.print(a + " ");
				sum++;
			}
			System.out.println("\nAntal: " + sum);
		}
	}
}
270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)