C语言解决穷举问题

举报
鸣海步 发表于 2022/04/19 20:59:10 2022/04/19
【摘要】 1.怎么解决穷举问题?用循环,找出问题中所有可能解变化的范围,找出最终解需满足的条件。例题1.找出三位整数中所有的水仙花数。方法1.(用单层循环)代码如下:#include <stdio.h>int main(){ int n,i,j,k; for(n=100;n<1000;n++)    {  i=n%10;       j=n/10%10;       k=n/100;       if...

1.怎么解决穷举问题?用循环,找出问题中所有可能解变化的范围,找出最终解需满足的条件。

例题1.找出三位整数中所有的水仙花数。

方法1.(用单层循环)

代码如下:#include <stdio.h>
int main()
{ int n,i,j,k;
 for(n=100;n<1000;n++)
    {  i=n%10;
       j=n/10%10;
       k=n/100;
       if((i*i*i+j*j*j+k*k*k)==n)
         printf("%d是水仙花数\n",n);
    }
    
    return 0;
}

方法2.(用三重循环)

代码如下:

#include <stdio.h>
int main()
{ int i,j,k;
  for(i=1;i<10;i++)
    for(j=0;j<10;j++)
       for(k=0;k<10;k++)
         if((i*i*i+j*j*j+k*k*k)==i*100+j*10+k)
           printf("%d是水仙花数\n",i*100+j*10+k);
           return 0;}
例题2.找出1-1000之间能被7或11整除,但不能同时被7和11整除的所有整数。

分析:找出问题中所有可能解变化的范围;找出最终解需满足的条件;可能解范围1-1000;能被7或11整除,但不能同时被7和11整除。

代码如下:

#include <stdio.h>
int main()
{  int n,k=0;
  for(n=1;n<1000;n++)
     if(((n%7==0)||(n%11==0))&&(n%77!=0))
       {  printf("%5d",n);
        k++;
        if(k%10==0) 
        printf("\n");}
        return 0;

}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。