solution.md 4.3 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 带分数
F
fix bug  
feilong 已提交
2

3
**问题描述**
F
fix bug  
feilong 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10 11 12
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。

还可以表示为:100 = 82 + 3546 / 197。

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100 有 11 种表示法。

13
**输入格式**
F
fix bug  
feilong 已提交
14

每日一练社区's avatar
每日一练社区 已提交
15 16
从标准输入读入一个正整数N (N<1000*1000)

17
**输出格式**
F
fix bug  
feilong 已提交
18

每日一练社区's avatar
每日一练社区 已提交
19 20 21 22
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

注意:不要求输出每个表示,只统计有多少表示法!

23
**样例输入1**
F
fix bug  
feilong 已提交
24

每日一练社区's avatar
每日一练社区 已提交
25 26 27
```
100
```
28
**样例输出1**
F
fix bug  
feilong 已提交
29

每日一练社区's avatar
每日一练社区 已提交
30 31 32
```
11
```
33
**样例输入2**
F
fix bug  
feilong 已提交
34

每日一练社区's avatar
每日一练社区 已提交
35 36 37
```
105
```
38
**样例输出2**
F
fix bug  
feilong 已提交
39

每日一练社区's avatar
每日一练社区 已提交
40 41 42 43
```
6
```

每日一练社区's avatar
每日一练社区 已提交
44
以下<span style="color:red">错误</span>的一项是?
每日一练社区's avatar
每日一练社区 已提交
45

每日一练社区's avatar
每日一练社区 已提交
46
## aop
F
fix bug  
feilong 已提交
47

每日一练社区's avatar
每日一练社区 已提交
48
### before
F
fix bug  
feilong 已提交
49

每日一练社区's avatar
每日一练社区 已提交
50
```cpp
每日一练社区's avatar
每日一练社区 已提交
51 52
#include <bits/stdc++.h>
using namespace std;
每日一练社区's avatar
每日一练社区 已提交
53 54

```
每日一练社区's avatar
每日一练社区 已提交
55

每日一练社区's avatar
每日一练社区 已提交
56
### after
F
fix bug  
feilong 已提交
57

每日一练社区's avatar
每日一练社区 已提交
58
```cpp
每日一练社区's avatar
每日一练社区 已提交
59

每日一练社区's avatar
每日一练社区 已提交
60 61 62
```

## 答案
F
fix bug  
feilong 已提交
63

每日一练社区's avatar
每日一练社区 已提交
64
```cpp
每日一练社区's avatar
每日一练社区 已提交
65
int main()
每日一练社区's avatar
每日一练社区 已提交
66
{
每日一练社区's avatar
每日一练社区 已提交
67 68 69 70
    int n, ans = 0;
    scanf("%d", &n);
    string s = "123456789";
    do
每日一练社区's avatar
每日一练社区 已提交
71
    {
每日一练社区's avatar
每日一练社区 已提交
72
        for (int i = 1; i <= 7; ++i)
每日一练社区's avatar
每日一练社区 已提交
73
        {
每日一练社区's avatar
每日一练社区 已提交
74 75 76 77
            string a = s.substr(0, i);
            int inta = atoi(a.c_str());
            if (inta >= n)
                break;
每日一练社区's avatar
每日一练社区 已提交
78

每日一练社区's avatar
每日一练社区 已提交
79 80 81 82 83 84 85 86
            for (int j = i; j <= 9 - i; ++j)
            {
                string b = s.substr(i, j);
                string c = s.substr(i + j);
                int intb = atoi(b.c_str());
                int intc = atoi(c.c_str());
                if (intb % intc == 0 && inta + intb / intc == n)
                    ans++;
每日一练社区's avatar
每日一练社区 已提交
87 88
            }
        }
每日一练社区's avatar
每日一练社区 已提交
89 90 91
    } while (next_permutation(s.begin(), s.end()));
    printf("%d\n", ans);
    return 0;
每日一练社区's avatar
每日一练社区 已提交
92 93 94 95
}
```
## 选项

F
fix bug  
feilong 已提交
96

每日一练社区's avatar
每日一练社区 已提交
97
### A
F
fix bug  
feilong 已提交
98

每日一练社区's avatar
每日一练社区 已提交
99
```cpp
每日一练社区's avatar
每日一练社区 已提交
100 101 102 103 104
int visit[10] = {0};
int s[10];
int ans = 0;
int N;
void found(int s[])
每日一练社区's avatar
每日一练社区 已提交
105
{
每日一练社区's avatar
每日一练社区 已提交
106 107
    int x, y, z;
    for (int i = 1; i < 9; i++)
每日一练社区's avatar
每日一练社区 已提交
108
    {
每日一练社区's avatar
每日一练社区 已提交
109
        for (int j = i + 1; j < 9; j++)
每日一练社区's avatar
每日一练社区 已提交
110
        {
每日一练社区's avatar
每日一练社区 已提交
111 112
            x = y = z = 0;
            for (int k = 0; k < 9; k++)
每日一练社区's avatar
每日一练社区 已提交
113
            {
每日一练社区's avatar
每日一练社区 已提交
114 115 116 117 118 119 120 121 122 123
                if (k < i)
                    x = x * 10 + s[k + 1];
                else if (k < j)
                    y = y * 10 + s[k + 1];
                else
                    z = z * 10 + s[k + 1];
            }
            if (y % z == 0 && x + y / z == N)
            {
                ans++;
每日一练社区's avatar
每日一练社区 已提交
124 125 126
            }
        }
    }
每日一练社区's avatar
每日一练社区 已提交
127 128 129 130 131 132
}

void dfs(int pos, int n)
{
    if (pos == n)
        found(s);
每日一练社区's avatar
每日一练社区 已提交
133 134
    else
    {
每日一练社区's avatar
每日一练社区 已提交
135
        for (int i = 1; i <= 9; i++)
每日一练社区's avatar
每日一练社区 已提交
136
        {
每日一练社区's avatar
每日一练社区 已提交
137 138 139 140 141 142 143
            if (!visit[i])
            {
                s[pos] = i;
                visit[i] = 1;
                dfs(pos + 1, n);
                visit[i] = 0;
            }
每日一练社区's avatar
每日一练社区 已提交
144 145 146
        }
    }
}
每日一练社区's avatar
每日一练社区 已提交
147 148 149 150 151 152 153 154
int main()
{
    cin >> N;
    dfs(1, 10);
    cout << ans << endl;
    return 0;
}

每日一练社区's avatar
每日一练社区 已提交
155 156 157
```

### B
F
fix bug  
feilong 已提交
158

每日一练社区's avatar
每日一练社区 已提交
159
```cpp
每日一练社区's avatar
每日一练社区 已提交
160 161 162 163 164 165 166 167 168 169 170 171 172
int parse(const char *arr, int pos, int len)
{
    int ans = 0;
    int t = 1;
    for (int i = pos + len - 1; i >= pos; i--)
    {
        ans += (arr[i] - '0') * t;
        t *= 10;
    }
    return ans;
}

int main()
每日一练社区's avatar
每日一练社区 已提交
173
{
每日一练社区's avatar
每日一练社区 已提交
174 175 176 177 178
    int N;
    cin >> N;
    int ans = 0;
    string s = "123456789";
    do
每日一练社区's avatar
每日一练社区 已提交
179
    {
每日一练社区's avatar
每日一练社区 已提交
180 181
        const char *str = s.c_str();
        for (int i = 0; i <= 7; i++)
每日一练社区's avatar
每日一练社区 已提交
182
        {
每日一练社区's avatar
每日一练社区 已提交
183 184 185 186 187 188 189

            int inta = parse(str, 0, i);

            if (inta >= N)
                break;
            for (int j = 1; j <= 9 - 1 - i; j++)

每日一练社区's avatar
每日一练社区 已提交
190 191
            {

每日一练社区's avatar
每日一练社区 已提交
192 193 194
                int intb = parse(str, i, j);
                int intc = parse(str, i + j, 9 - i - j);
                if (intb % intc == 0 && inta + intb / intc == N)
每日一练社区's avatar
每日一练社区 已提交
195
                {
每日一练社区's avatar
每日一练社区 已提交
196
                    ans++;
每日一练社区's avatar
每日一练社区 已提交
197 198 199
                }
            }
        }
每日一练社区's avatar
每日一练社区 已提交
200
    } while (next_permutation(s.begin(), s.end()));
每日一练社区's avatar
每日一练社区 已提交
201

每日一练社区's avatar
每日一练社区 已提交
202 203
    cout << ans;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
204 205 206 207
}
```

### C
F
fix bug  
feilong 已提交
208

每日一练社区's avatar
每日一练社区 已提交
209
```cpp
每日一练社区's avatar
每日一练社区 已提交
210 211
int a[10] = {0};
int Division(int m)
每日一练社区's avatar
每日一练社区 已提交
212
{
每日一练社区's avatar
每日一练社区 已提交
213 214
    int t;
    while (m)
每日一练社区's avatar
每日一练社区 已提交
215
    {
每日一练社区's avatar
每日一练社区 已提交
216 217
        t = m % 10;
        if (t == 0)
每日一练社区's avatar
每日一练社区 已提交
218
        {
每日一练社区's avatar
每日一练社区 已提交
219
            return 0;
每日一练社区's avatar
每日一练社区 已提交
220
        }
每日一练社区's avatar
每日一练社区 已提交
221 222
        a[t]++;
        m = m / 10;
每日一练社区's avatar
每日一练社区 已提交
223
    }
每日一练社区's avatar
每日一练社区 已提交
224 225 226 227 228 229 230 231
    return 1;
}
int main()
{
    int i, k, j;
    int number, ans = 0, flag;
    cin >> number;
    for (i = 1; i < number; i++)
每日一练社区's avatar
每日一练社区 已提交
232
    {
每日一练社区's avatar
每日一练社区 已提交
233
        for (j = 1; j <= 4938; j++)
每日一练社区's avatar
每日一练社区 已提交
234
        {
每日一练社区's avatar
每日一练社区 已提交
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
            memset(a, 0, sizeof(a));
            k = (number - i) * j;
            if (Division(i) && Division(j) && Division(k))
            {
                flag = 1;
                for (int x = 1; x < 10; x++)
                {
                    if (a[x] != 1)
                    {
                        flag = 0;
                        break;
                    }
                }
                if (flag == 1)
                    ans++;
            }
每日一练社区's avatar
每日一练社区 已提交
251 252
        }
    }
每日一练社区's avatar
每日一练社区 已提交
253 254
    cout << ans;
    return 0;
每日一练社区's avatar
每日一练社区 已提交
255 256
}
```