CUIT-ACM 01-16 D

D - Strange Addition CodeForces - 305A
题目大意:
Vasya只会计算0 + n(n为自然数)的和,eg:0+31√、10+5√、10+20×、11+20×……
现在输入k (1 ≤ k ≤ 100)个非负整数d1, d2, ..., dk (0 ≤ di ≤ 100),选出满足条件的数
INPUT
k
d1 d2 d3……dk
OUTPUT
被选出来的数
思路:
因为0 ≤ di ≤ 100,所以100和0一定是可以的!!!,如果有100或0先筛选出这2个数
判断0  flag==1(10位已经存在不为0的数,所以个位在1~9任意数都可以)找出1 flag==0(不存在10、20……这类数,所以1~99都可以)找出1 输出刚才所有找出的数
代码:
https://vjudge.net/solution/7920526/E2nNI7FbhlR2r0tjf5eq

#include
int main()
{
    int n,a[101],b[10],i=0,k=0,flag=0,n1;
    scanf("%d",&n);
    n1=n;
    while(n>0)
    {
        scanf("%d",&a[i]);
        if(a[i]==0||a[i]==100)
        {
            b[k]=a[i];
            k++;
        }
        i++;
        n--;
    }
    for(i=0;i9&&a[i]<91)
        {
            b[k]=a[i];
            k++;
            flag=1;
            break;
        }
    }

    if(flag==1)
    {
        for(i=0;i0&&a[i]<10)
            {
                b[k]=a[i];
                k++;
                break;
            }
        }
    }
    else
    {
        for(i=0;i0&&a[i]<100)
            {
                b[k]=a[i];
                k++;
                break;
            }
        }
    }
    printf("%d\n",k);
    for(i=0;i

注意:
Ⅰ.分层筛选可以避免重复和漏掉,所以要先分析特殊的数,再一层一层地筛选

你可能感兴趣的:(CUIT-ACM 01-16 D)