首页
社区
课程
招聘
[旧帖] [求助]求C语言高手帮忙~ 0.00雪花
发表于: 2011-4-22 10:53 1703

[旧帖] [求助]求C语言高手帮忙~ 0.00雪花

2011-4-22 10:53
1703
1.  给定等式  A B C D E     其中每个字母代表一个数字,且不同数字对应不
                  D F G     同字母。编程求出这些数字并且打出这个数字的
             +     D F G     算术计算竖式。

             ───────

                     X Y Z D E

  2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
  人参加了竞赛:

   (1)A参加时,B也参加;

   (2)B和C只有一个人参加;

   (3)C和D或者都参加,或者都不参加;

   (4)D和E中至少有一个人参加;

   (5)如果E参加,那么A和D也都参加。

写出代码,万分感谢~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你的第一题字母对应的是ascall码吗?想讨论的话,加这个qq931614367吧。我不是个高手,事先说明》
2011-4-22 11:04
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是那个编码,就是求出数字
2011-4-22 11:59
0
雪    币: 102
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
1.FG可以看出来,其它穷举应该速度也不慢。
2ABCDE从00000到11111一个个试,找到满足条件的。
2011-4-22 12:53
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
a,b,c,d,e分别从00000到11111?
2011-4-22 13:08
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
trt
6
这个还真是不明白啊 我学习下啦
2011-4-22 13:33
0
雪    币: 2109
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
#include <stdio.h>
#include <stdlib.h>

#define A 16 // 10000b
#define B 8   // 01000b
#define C 4   // 00100b
#define D 2   // 00010b
#define E 1   // 00001b

int show(int x)
{
if (x == 0)
   return 0;
printf("Player: ");
if (x & A)
   printf("A ");
if (x & B)
   printf("B ");
if (x & C)
   printf("C ");
if (x & D)
   printf("D ");
if (x & E)
   printf("E ");
printf("\n");
return 1;
}

int main()
{
int i;
int array[32];

for (i = 0; i < 32; i++) {
   array[i] = 1;
   if ((i&A)&&!(i&B))
     array[i] = 0;
   if ((i&B)&&(i&C))
     array[i] = 0;
   if ((i&C)&&!(i&D))
     array[i] = 0;
   if (!(i&C)&&(i&D))
     array[i] = 0;
   if (!(i&D)&&!(i&E))
     array[i] = 0;
   if ((i&E)&&!(i&A))
     array[i] = 0;
   if ((i&E)&&!(i&D))
     array[i] = 0;
   if (array[i] == 1)
     show(i);
}
}

/*
gcc -o abcde.exe abcde.c
./abcde.exe
Player: C D
*/
2011-4-22 14:12
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这代码好像不怎么对啊
2011-4-22 14:22
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
9
老师留给你的题目 最好还是自己先思考思考
#include <stdio.h>
#include "memory.h"
typedef unsigned char byte;

/***********第一题*****************
1.  给定等式 
	 A B C D E     其中每个字母代表一个数字,且不同数字对应不
		 D F G     同字母。编程求出这些数字并且打出这个数字的
	  +  D F G     算术计算竖式。
  ───────
	 X Y Z D E
 ******************************/

/*************第二题**************
	2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
	人参加了竞赛:

	(1)A参加时,B也参加;

	(2)B和C只有一个人参加;

	(3)C和D或者都参加,或者都不参加;

	(4)D和E中至少有一个人参加;

	(5)如果E参加,那么A和D也都参加。
****************************************/

typedef void (* pfn)(const int *, int, int *);

void _select(const int *pInt, int size, int *pCount)
{
	// A B C D E F G X Y Z
	// 0 1 2 3 4 5 6 7 8 9
	int m = pInt[0]*10000 + pInt[1]*1000 + pInt[2]*100 + pInt[3]*10 + pInt[4];
	int n = pInt[3]*100 + pInt[5]*10 + pInt[6];

	int r = pInt[7]*10000 + pInt[8]*1000 + pInt[9]*100 + pInt[3]*10 + pInt[4];
	if (m + n*2 == r)
	{
		(*pCount)++;
		printf("%d %d %d %d %d\r\n", pInt[0], pInt[1], pInt[2], pInt[3], pInt[4]);
		printf("    %d %d %d\r\n", pInt[3], pInt[5], pInt[6]);
		printf(" +  %d %d %d\r\n", pInt[3], pInt[5], pInt[6]);
		printf("─────\r\n");
		printf("%d %d %d %d %d\r\n\r\n", pInt[7], pInt[8], pInt[9], pInt[3], pInt[4]);
	}
}

void __do_it(const int *pInt, int size, int iDeep, int *pCount, pfn pfunc)
{
	//结束条件
	if (iDeep == size-1)
	{
		pfunc(pInt, size, pCount);
		return ;
	}

	//递归
	for (int i=iDeep; i<size; i++)
	{
		int pTemp[100] = {0};
		memcpy(pTemp, pInt, size*sizeof(int));

		//交换
		pTemp[iDeep] = pInt[i];
		pTemp[i] = pInt[iDeep];

		__do_it(pTemp, size, iDeep+1, pCount, pfunc);
	}
}

void func1()
{
	int iCount = 0;
	int szInt[10] = {1,2,3,4,5,6,7,8,9,0};
	__do_it(szInt, 10, 0, &iCount, _select);

	printf("组合数共有:%d种.\r\n", iCount);
}

/*************第二题**************
	2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
	人参加了竞赛:

	(1)A参加时,B也参加;

	(2)B和C只有一个人参加;

	(3)C和D或者都参加,或者都不参加;

	(4)D和E中至少有一个人参加;

	(5)如果E参加,那么A和D也都参加。
****************************************/
#define A	0
#define B	1
#define C	2
#define D	3
#define E	4

bool conditions(bool r[])
{
	//(1)A参加时,B也参加;
	if (r[A] == true)
	{
		if (r[B] != true)
		{
			return false;
		}
	}

	//(2)B和C只有一个人参加
	if (r[B] == true && r[C] == true)
	{
		return false;
	}

	//(3)C和D或者都参加,或者都不参加;
	if (r[C] != r[D])
	{
		return false;
	}

	//(4)D和E中至少有一个人参加;
	if (r[D]==false && r[E]==false)
	{
		return false;
	}

	//(5)如果E参加,那么A和D也都参加。
	if (r[E]==true)
	{
		if (r[A] != true || r[D] != true)
		{
			return false;
		}
	}
	return true;
}

void initr(bool r[], byte i)
{
	r[0] = (i&0x01) == 0? false:true; //0000 0001
	r[1] = (i&0x02) == 0? false:true; //0000 0010
	r[2] = (i&0x04) == 0? false:true; //0000 0100
	r[3] = (i&0x08) == 0? false:true; //0000 1000
	r[4] = (i&0x10) == 0? false:true; //0001 0000
}

void func2()
{
	//true 表示参加  false表示不参加
	bool r[5] = {0};

	//遍历所有的情况 2进制的 0-11111 即0~31
	for (byte i=0; i<32; i++)
	{
		//初始化 r[5]
		initr(r, i);
		if (conditions(r) == true)
		{
			printf("参加竞赛的有:");
			for (int j=0; j<5; j++)
			{
				if (r[j] == true)
				{
					printf("%c ", j +'A');
				}
			}
			printf("\r\n");
		}
	}
}

int main(int argc, char* argv[])
{
	printf("*********************第一题************************\r\n");
	func1();
	printf("*********************第二题************************\r\n");
	func2();
	return 0;
}
2011-4-23 19:45
0
雪    币: 71
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
C 语言功力深厚~~
2012-3-28 17:17
0
游客
登录 | 注册 方可回帖
返回
//