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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.