算法编程:用c语言实现

算法编程:用c语言实现,第1张

解决这类问题可以使用 回溯 算法,代码如下:

#include <stdioh>

#include <stdlibh>

#define M 6        // 候选数字个数

#define N 5        // 组合后数字位数

int check(int result[], int i)

{

    for (int j = 0; j < N; j++)

        if (result[j] == i)

            return 0;

    return 1;

}

int list(int numbers[], int l, int result[], int count)

{

    if (l >= N) {

        

        // 将各位数组合成一个数

        int num = 0;

        for (int i = 0; i < N; i++) {

            num = num  10 + numbers[result[i]];

        }

        

        // 判断这个数是否能被 75 整除

        if (num % 75 == 0) {

            printf("%d\n", num);

            count++;

        }

        return count;

    }

    for (int i = 0; i < M; i++) {

        if (!check(result, i)) {

            continue;

        }

        result[l] = i;

        count = list(numbers, l + 1, result, count);

        result[l] = -1;

    }

    return count;

}

int main() 

{

    int numbers[M] = { 1, 2, 5, 7, 8, 9 };

    int result[N] = { -1, -1, -1, -1, -1 };

    int count = list(numbers, 0, result, 0);

    printf("共有%d个\n", count);

    

    system("pause");

    return 0;

}

运行结果:

#include <stdioh>

#include <stdlibh>

#define stacksize 100

#define OK 1

typedef struct

{char top;

char base;

}Stack;

int init_stack(Stack s)

{sbase=(Stack )malloc(stacksizesizeof(Stack));

if(!sbase) exit(0);

stop=sbase;

return OK;

}

int Push(Stack s,int e)

{stop++=e;

return OK;

}

int Pop(Stack s)

{int e;

stop--;

e=stop;

return e;

}

int main(int argc, char argv[])

{int N,M;

int i,j,k,sub;

Stack S;

init_stack(S);

printf("Please input a number:");

scanf("%d",&N);

printf("\ninput a number of you want to change:");

scanf("%d",&M);

while(N!=0)

{i=N/M;

j=N%M;

Push(S,j);

N=i;

}

while(Stop!=Sbase)

{k=Pop(S);

printf("%d",k);

}

system("PAUSE");

return 0;

}

#include <stdioh>

#include<stdlibh>

#include<timeh>

int InArray(int a[],int N,int data)/判断data是否在数组a[N]中是则返回1,否则返回0/

{

int i;

for(i=0;i<N;i++)

if(data==a[i])

return 1;

return 0;

}

int main(void)

{

int i,j=1,temp,a[8]={0};

srand( (unsigned)time( NULL ) ); /保证每次生成的随机数不相同/

a[0]=rand()%8+1; /数组第一项/

for(i=1;i<8;i++)

{

temp=rand()%8+1;

if(InArray(a,8,temp))//当产生的随机数已存在

{i--;continue;}

else

a[j++]=temp;

}

for(i=0;i<8;i++)

printf("%d ",a[i]);

printf("\n");

return 0;

}

以上就是关于算法编程:用c语言实现全部的内容,包括:算法编程:用c语言实现、请帮忙用C语言实现这个算法、C语言写个算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9969668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存