solution.md 1.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
# 凑算式
```
   B    DEF   
A + —- +  ——–- = 10   
   C    GHI  
```
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。  

比如:   
6+8/3+952/714 就是一种解法,   
5+3/1+972/486 是另一种解法。  

这个算式一共有多少种解法?  
 

## aop
### before
```cpp
#include <stdio.h>
#include <stdbool.h>

int ans = 0;
int nums[10];
bool visited[10];

void judge()
{
	int i;
	if (nums[0] + (double)nums[1] / nums[2] + (double)(nums[3] * 100 + nums[4] * 10 + nums[5]) / (nums[6] * 100 + nums[7] * 10 + nums[8]) == 10)
	{
		printf("%d + %d/%d + %d%d%d/%d%d%d", nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], nums[7], nums[8]);
		printf("\n");
		ans++;
	}
}
```
### after
```cpp
int main()
{
	dfs(0);
	printf("%d\n", ans);
	return 0;
}

```

## 答案
```cpp
void dfs(int index)
{
	if (index >= 9)
	{
		judge();
		return;
	}
	int i;
	for (i = 1; i < 10; i++)
	{
		if (visited[i] == false)
		{
			visited[i] = true;
			nums[index] = i;
			dfs(index + 1);
			visited[i] = false;
		}
	}
}
```
## 选项

### A
```cpp
void dfs(int index)
{
	if (index >= 9)
	{
		judge();
		return;
	}
	int i;
	for (i = 1; i < 10; i++)
	{
		if (visited[i] == false)
		{
			visited[i] = true;
			nums[index] = i;
			dfs(index);
			visited[i] = false;
		}
	}
}
```

### B
```cpp
void dfs(int index)
{
	if (index >= 9)
	{
		judge();
		return;
	}
	int i;
	for (i = 1; i < 10; i++)
	{
		if (visited[i] == true)
		{
			visited[i] = false;
			nums[index] = i;
			dfs(index);
			visited[i] = true;
		}
	}
}
```

### C
```cpp
void dfs(int index)
{
	if (index >= 9)
	{
		judge();
		return;
	}
	int i;
	for (i = 1; i < 10; i++)
	{
		if (visited[i] == true)
		{
			visited[i] = false;
			nums[index] = i;
			dfs(index + 1);
			visited[i] = true;
		}
	}
}
```