设为首页 加入收藏

TOP

穷举(二):直接确定区间穷举(五)
2019-06-13 12:08:05 】 浏览:352
Tags:穷举 直接 确定 区间
p;   cin>>n;

       i=0;

       while (i<n)

       {

              x=rand()%1000+1;

              if (flag[x]==0)

              {

                     a[i++]=x;

                     flag[x]=1;

              }

       }

       cout<<"随机产生的"<<n<<"个整数如下:"<<endl;

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

              cout<<a[i]<<" ";

       cout<<endl;

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

              flag[i]=0;

       for (i=0;i<n-1;i++)

              for (j=i+1;j<n;j++)

                     flag[a[i]+a[j]]=1;

       cnt=0;

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

              if (flag[a[i]]==1) cnt++;

       cout<<"Count="<<cnt<<endl;

    return 0; 

【例5】神奇算式

       由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。比如:210× 6 = 1260,8 × 473 = 3784,27×81 = 2187都符合要求。

       如果满足乘法交换律的算式算作同一种情况,那么一共有多少种满足要求的算式呢?

      (1)编程思路。

      采用穷举法来解决。穷举对象分别为积和那个较小的乘数。其中积是一个4位数,取值范围为1023~9876,乘数的取值范围为2~98。

      循环体中需要检测两个约束条件:1)积这个4位数中每一位数字不允许重复;2)这4个数字出现且仅出现2次。这些约束条件可使用一个标记数组used[10]来处理。used数组的初值全为0,当数字i使用后,置used[i]=1,若数字i再次使用时,此时used[i]又等于1,则可判定约束条件不满足。

      (2)源程序及运行结果。

#include <iostream>

using namespace std;

int check(int x, int y,int used[10])

{

    int i,tmp[10]={0};

       do {

        tmp[x % 10]++;

    } while(x /= 10);

    do {

        tmp[y % 10]++;

    } while(y /= 10);

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

              if (tmp[i]!=used[i])

            &n

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇个人学习笔记:C语言程序结构 下一篇有些CCS工程中为什么会有两个CMD..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目