17. april 2007 - 19:06
Der er
11 kommentarer og 1 løsning
Algoritme problem - gruppering
Hej.. jeg vil gruppere nogle tal ind i nogle grupper. fx 0,1,2,3,4,5,6,7,8,9,10,11,14 ind i 1: 0,1,2,3,4 2: 5,6,7,8,9 3: 10,11,12,13 Til at finde ud af hvilke gruppe nummer de skal være i bruger jeg denne formel: gruppeNummer = nummer / iAlt * kolonneAntal den virker dog ikke når det er i "int"s da 0,8 jo bliver til 0, men den virker fint med "float"s. "Ved" at det er muligt at lave i "int"s, og vil gerne have den ekstra ydelse :)
Annonceindlæg fra Barco
Er jeres mødelokaler sikre nok?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
17. april 2007 - 20:40
#1
umiddelbart vil jeg da mene at gruppenr = nummer / kolonneantal + 1 virker fint med dit eksempel
17. april 2007 - 20:45
#2
nej der deler den 4 ud af gangen?
17. april 2007 - 20:46
#3
0 / 3 = 0 1 / 3 = 0 2 / 3 = 0 3 / 3 = 1 4 / 3 = 1 5 / 3 = 1 6 / 3 = 2
17. april 2007 - 20:50
#4
0 / 5 + 1 = 1 ... 4 / 5 + 1 = 1 5 / 5 + 1 = 2 ... 9 / 5 + 1 = 2 10 / 5 + 1 = 3 ... 14 / 5 + 1 = 3
17. april 2007 - 20:53
#5
Jo men hvis der så er 13 tal så: 0 / 5 = 0 1 / 5 = 0 2 / 5 = 0 3 / 5 = 0 4 / 5 = 0 5 / 5 = 1 6 / 5 = 1 7 / 5 = 1 8 / 5 = 1 9 / 5 = 1 10 / 5 = 2 11 / 5 = 2 12 / 5 = 2 så bliver det ikke delt rigtigt. Nok ikke mig der har forklaret mig ordentligt. Men der må ikke være 5-5-3, så skal det være 5-4-4. Hermed hævet til 60
17. april 2007 - 21:09
#6
proev: gruppenr = (int)(nummer * (antalraekker/(double)antalnumre) + 1);
17. april 2007 - 21:14
#7
den har jeg også prøvet... men ville undgå at bruge floats og doubles, men er tilsyneladende svært :D
17. april 2007 - 21:50
#8
proev og kig paa g3 udregningen nedenfor: using System; namespace E { public class MainClass { private const int COLS = 5; private const int ROWS = 3; private static void Test(int n) { for(int i = 0; i < n;i ++) { int g1 = i / COLS + 1; double f = ROWS/(double)n; int g2 = (int)(i * f + 1); int g3; int cut = COLS * ((n - 1) % ROWS + 1); if(i <= cut) { g3 = i / COLS + 1; } else { g3 = cut / COLS + (i - cut) / (COLS - 1) + 1; } Console.WriteLine(i + " " + g1 + " " + g2 + " " + g3); } } public static void Main(string[] args) { Test(13); Test(14); Test(15); } } }
17. april 2007 - 22:00
#9
items = 15; columns = 3; for (int i = columns - 1; i >= 0; i--) { int minGrab = items / columns; int to = items - minGrab; for (int j = to; j < items; j++) list[i].Add(j); items -= minGrab; columns--; } ved at teste om den er hurtig...
17. april 2007 - 22:01
#10
dog uden list ;)
17. april 2007 - 22:17
#11
min nye tager 2,75 s for 10.000.000 gange, og med float er det 3,9 s HiPerfTimer timer = new HiPerfTimer(); restart: int[] cells = new int[3]; timer.Start(); //0,35 for (int gange = 0; gange < 10000000; gange++) { int columns = 3; int items = 13; for (int i = columns - 1; i >= 0; i--) { int minGrab = items / columns; int to = items - minGrab; for (int j = to; j < items; j++) cells[i] = j; items -= minGrab; columns--; } //for (int i = 0; i < items; i++) // cells[(int)((float)i / (float)items * (float)columns)] = i; } timer.Stop(); Console.WriteLine(timer.Duration); Console.WriteLine("Try again? [y/n]"); if (Console.ReadKey().Key == ConsoleKey.Y) goto restart;
26. marts 2008 - 21:39
#12
lukker
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.