打表法?(c语言)

Python016

打表法?(c语言),第1张

#include <stdio.h>

#include <string.h>

char str[7], flag[1000000]

void Init()

{

int i, j, k

memset(flag, '1', sizeof(flag))

for (i=1i<1000000i++)

{

itoa(i, str, 10)

for (j=0,k=strlen(str)-1j<=kj++,k--)

{

if (str[j]=='4'||str[k]=='4')

{

flag[i] = '0'

break

}

if ((str[j]=='6'&&str[j+1]=='2')||(str[k-1]=='6'&&str[k]=='2'))

{

flag[i] = '0'

break

}

}

}

}

int main()

{

int n, m, sum, i

Init()

while (scanf("%d%d",&n,&m), n+m)

{

for (sum=0,i=ni<=mi++) sum += flag[i]-'0'

printf("%d\n", sum)

}

return 0

}

是算法竞赛选手吗?

打表法一般是这么用的:

有些题的输入输出都很简单,比如输入只有两个整数,输出一个整数这种。但是暴力肯定会超时。这时候就先暴力计算出来比如前100项的答案,列成表格人眼找规律,然后根据自己(猜的)规律直接写个程序交上去....如果AC了就猜对了,wrong answer了就再想办法。

//#include "stdafx.h"//vc++6.0加上这一行.

#include "stdio.h"

int main(void){

    int a,b,i,x,y,f,n

    printf("Enter a & b(int)...\n")

    scanf("%d%d",&a,&b)

    for(n=an<=bn++){

        for(x=1,n&1 ? (i=3,f=2) : (i=2,f=1)(a=i*i)<=ni+=f)

            if(!(n%i))

                (x+=i)+= a!=n ? n/i : 0

        for(y=1,x&1 ? (i=3,f=2) : (i=2,f=1)(a=i*i)<=xi+=f)

            if(!(x%i))

                (y+=i)+=a!=x ? x/i : 0

        if(y==n && y!=x)

            printf("%d\t%d\n",n,x)

    }

    return 0

}