C :: Aufgabe #2 :: Lösung #1

2 Lösungen Lösungen öffentlich
#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
#1
vote_ok
von devnull (8870 Punkte) - 02.07.2013 um 15:16 Uhr
Quellcode ausblenden C-Code
/****************************************
 * 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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben