Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 15:11   #1
kane21
Новичок
Джуниор
 
Регистрация: 11.03.2012
Сообщений: 1
По умолчанию Задача в СИ на строки.

Помогите с прогой на СИ. Заданы 4 целых числа, в которых некоторые цифры заменены буквами. Надо найти подстановки цифр вместо букв, чтобы разные буквы заменялись разными, одинаковые - одинаковыми, числа не начинались с нулей и совпали суммы 2 первых и 2 последних чисел.


Понимаю идею саму, но не могу написать, также идея с использованием указателей не получается.

Последний раз редактировалось kane21; 11.03.2012 в 15:15.
kane21 вне форума Ответить с цитированием
Старый 12.03.2012, 19:53   #2
NoXCode
Новичок
Джуниор
 
Регистрация: 12.03.2012
Сообщений: 2
Радость

Код:
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void ldigits(int* ptr, int n);
char* repl_alpha(const char* sz);

bool isdigitsv(char* psz);

bool isequal(int* ptr, int n)
 { return ptr[0] + ptr[1] == ptr[n-1] + ptr[n-2]; }

int _tmain(int argc, _TCHAR* argv[])
{
	char* ppsz[4] = { "2a1c", "15d6", "1j42", "a651"};

	int* pn = new int[4];
	memset((void*)pn,0x00, 4);
	
	for (int i = 0; i < 4; i++)
		pn[i] = atol(repl_alpha(ppsz[i]));
	if (!isequal(pn, 4)) ldigits(pn, 4);

	for (int i = 0; i < 4; i++)
		printf("%d ",pn[i]);

	printf("\n");

	return 0;
}

bool isdigitsv(char* psz)
{
	for (int i = 0; i < strlen(psz); i++)
		if (isalpha(psz[i])) return false;
	return true;
}

void ldigits(int* ptr, int n)
{
	int s = ptr[0] + ptr[1]; ptr[n-1] = s; 
	while(ptr[n-1] >= s)                   
		ptr[n-1] = rand() % (s-1) + 1;     
	ptr[n-2] = s - ptr[n-1];                 
}

char* repl_alpha(const char* sz)
{
	char *psz_t = new char[1024],
	     *psz = new char[1024];
	
	memset((void*)psz_t, 0x00, strlen(psz_t));
	strcpy(psz, sz);

	while(!isdigitsv(psz))
	{
		int i = 0;
		while (!isalpha(psz[i]) && psz[i] != '\0') 
			psz_t[i++] = psz[i];
		
		psz_t[i] = '\0';

		int k = 0;
		for (k = i; !isdigit(psz[k]) && psz[k] != '\0'; k++)
			 sprintf(psz_t,"%s%d",psz_t,psz[k]);
		
	    sprintf(psz_t,"%s%s",psz_t,&psz[k]);
	    strcpy(psz,psz_t);
	}

	return psz;
}

Последний раз редактировалось ACE Valery; 13.03.2012 в 20:06.
NoXCode вне форума Ответить с цитированием
Старый 12.03.2012, 20:09   #3
NoXCode
Новичок
Джуниор
 
Регистрация: 12.03.2012
Сообщений: 2
По умолчанию

Код:
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void ldigits(int* ptr, int n);
char* repl_alpha(const char* sz);

bool isdigitsv(char* psz);

bool isequal(int* ptr, int n)
 { return ptr[0] + ptr[1] == ptr[n-1] + ptr[n-2]; }

int _tmain(int argc, _TCHAR* argv[])
{
	char* ppsz[4] = { "2a1c", "15d6", "1j42", "a651"};

	int* pn = new int[4];
	memset((void*)pn,0x00, 4);
	
	for (int i = 0; i < 4; i++)
		pn[i] = atol(repl_alpha(ppsz[i]));
	if (!isequal(pn, 4)) ldigits(pn, 4);

	for (int i = 0; i < 4; i++)
		printf("%d ",pn[i]);

	printf("\n");

	return 0;
}

bool isdigitsv(char* psz)
{
	for (int i = 0; i < strlen(psz); i++)
		if (isalpha(psz[i])) return false;
	return true;
}

void ldigits(int* ptr, int n)
{
	int s = ptr[0] + ptr[1]; ptr[n-1] = s; 
	while(ptr[n-1] >= s)                   
		ptr[n-1] = rand() % (s-1) + 1;     
	ptr[n-2] = s - ptr[n-1];                 
}

char* repl_alpha(const char* sz)
{
	char *psz_t = new char[1024],
	     *psz = new char[1024];
	
	memset((void*)psz_t, 0x00, strlen(psz_t));
	strcpy(psz, sz);

	while(!isdigitsv(psz))
	{
		int i = 0;
		while (!isalpha(psz[i]) && psz[i] != '\0') 
			psz_t[i++] = psz[i];
		
		psz_t[i] = '\0';

		int k = 0;
		for (k = i; !isdigit(psz[k]) && psz[k] != '\0'; k++)
			 sprintf(psz_t,"%s%d",psz_t,psz[k]);
		
	    sprintf(psz_t,"%s%s",psz_t,&psz[k]);
	    strcpy(psz,psz_t);
	}

	return psz;
}
NoXCode вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки rmv240899 Общие вопросы C/C++ 2 18.02.2012 22:30
Задача на строки diekster Помощь студентам 1 13.02.2012 17:48
Задача (строки) lAmourl Помощь студентам 1 21.10.2011 07:01
Задача на строки С++ Many man Помощь студентам 10 06.05.2009 21:17
задача на строки Hostlman Помощь студентам 2 26.12.2007 03:17