C :: Aufgabe #2 :: Lösung #1
2 Lösungen
#2
Zahlenfolge berechnen und fortsetzen
Anfänger - C
von pocki
- 24.11.2012 um 19:50 Uhr
Es soll eine Zahlenfolge wiefolgt berechnet werden:
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
Die nacheinander folgenden gleichen Zahlen werden gezählt und zusammen mit der Zahl ausgegeben.
Aus der neu berechneten Zahlenfolge errechnet sich die nächste.
Beispiel:
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
usw.
Es soll nun mit dieser ersten Folge startend die 15. Folge berechnet und ausgegeben werden.
Wenn mehrstellige Zahlen vorkommen sind diese gleich auszugeben. Bsp: 12 Einser = 121
#1
von devnull (8870 Punkte)
- 02.07.2013 um 15:16 Uhr
/****************************************
* folge.c Folge erstellen
*
* OS : GNU/Linux
* compile: gcc -Wall -o folge folge.c
* usage : ./folge [n] (Default n=15)
*
* devnull 02-07-2013
****************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLOOP 15
#define MAXLEN 200
/* main */
int main( int argc, char **argv )
{
/*
1. Folge: 112
2. Folge: 2112 (2 Einser und 1 Zweier)
3. Folge: 122112 (1 Zweier, 2 Einser, und 1 Zweier)
*/
char s1[MAXLEN];
char s2[MAXLEN];
char sc[8];
char *p1,*p2;
int cc,loop,maxloop;
maxloop=(argc>1)?atoi(argv[1]):MAXLOOP;
strcpy(s1,"112");
s2[0]='\0';
for (loop=1;loop<=maxloop;loop++) {
for (cc=0,p1=p2=s1;*p1;p2++) {
if (*p1 != *p2) {
sprintf( sc,"%d%c",cc,*p1 );
if (strlen(s2)+strlen(sc) < MAXLEN) {
strcat( s2,sc );
} else {
fprintf( stderr, "string too long, cannot continue\n" );
return 1;
}
p1=p2;
cc=0;
}
cc++;
}
printf( "%3d : %s\n", loop,s2 );
strcpy( s1,s2 );
s2[0]='\0';
}
return 0;
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
