Har fått en uppgift jag inte förstår mig på riktigt...om ni förklarar _hur_ man kan göra för att lösa problemet så kan jag göra programmeringen själv eftersom jag inte förstått hur man får fram lösningen. men vill ni programmera så varsågod.
Denna uppgift är egentligen en matematisk klurighet, men här är tanken att ni ska lösa den med ett program.
På ett stort runt fat finns mellan 100 och 200 jordgubbar fördelade runt kanten. En liten flicka börjar äta bären på följande sätt: när hon ätit det första låter hon det andra ligga. Därefter äter hon det tredje bäret och låter nästa ligga och så vidare. I ett nafs äter hon varannan jordgubbe hela vägen runt. Flickan är omättlig och fortsätter att äta på detta sätt tills det bara är ett bär kvar - nämligen det bär, hon först hoppade över (d.v.s. det andra bäret) Hur många bär fanns det från början?
Jag föreslår att du läser den här tråden. Situationen är ytterligt snarlik, även om språket och frågeställningen är en annan.
Mitt tips är att du frågar din lärare eller handledare/assistent
- beroende av på vilken nivå du befinner dig - om hjälp. Om du inte vet i vilket härad du ska börja för att få ut lösningen kan de säkert tipsa dig under förutsättning att det är meningen att du ska få hjälp om du fastnat....
Jag tror tyvärr inte att jag har tid att förklara koden eller konvertera den till C. Detta är bara min lösning på det, och jag ser helst att du skriver ditt eget program.
ok, tackar ska kolla på din lösning och se om jag förstår den och sedan försöka mig på att skriva en egen lösning i C.
jag skriver helst programmet själv eftersom det är meningen att jag ska göra det, och jag vill gärna lära mig nånting på kuppen. men vill nån förklara lite hur man kan gå till väga så får ni göra det.
Som sang-drax mycket riktigt säger så är det vid 129 bär detta sker, hur tusan kunde du veta det för övrigt?.
Man är väl matematiker :)
Om man går baklänges från den sista jordgubben ser man att antalet jordgubbar som krävs är: 1, 3, 5, osv
Det vill säga att antalet jordgubbar måste kunna skrivas på formen 2^n + 1
Det enda tal x i intervallet 100<=x<=200 på den formen är just x=129.
vet inte om det är den lättaste lösningen men det var den som jag fick att fungera efter alla möjliga olika försök.
hur som helst, så ser koden ut så här och kommentarerna förklarar vad saker o ting gör.
#include <stdio.h>
/* Räknar antalet bär kvar */
int sumBar(int c, char bar[])
{
int sum=0, i;
for(i=0;i<c;i++)
{
if(bar[i]=='j')
sum++;
}
return sum;
}
/* Kollar vilket bär som är kvar */
int kvarBar(int c, char bar[])
{
int sum=1, i;
for(i=0;i<c;i++)
{
if(bar[i]=='u')
sum++;
if(bar[i]=='j')
break;
}
return sum;
}
int main(void)
{
int i, c=100, a, sista;
char bar[200];
while(c<201)
{
/* markera som oätna */
for(i=0;i<200;i++)
bar[i] = 'j';
/* Berättar om den ätit nyss eller inte a=1 betyder
att den ska äta nästa gång. */
a=1;
/* äta bär */
for(i=0;i<c;i++)
{
/* Om oäten och inte ätit nyss = ÄT */
if(a==1 && bar[i]=='j'){
bar[i] = 'u';
a = 0;
}
/* Om oäten och ätit nyss = ät INTE */
else if(a==0 && bar[i]=='j'){
a = 1;
}
/* För att gå igenom bären och äta flera gånger
i sätts till -1 eftersom den plussas på innan
nästa varv körs för vi vill att den börjar på 0 */
if(i>(c-2))
i = -1;
/* Kolla hur många oätna bär som finns kvar,
om bara en kvar, skriv ut vilket och bryt */
if(sumBar(c, bar)==1){
sista = kvarBar(c, bar);
printf("Total: %d Sista: %d\n", c, sista);
break;
}
}
/* Öka totala antalet bär till nästa varv */
c++;
}
return 0;
}
263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849