Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33843
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-14 22:45
文章分类
文章存档

2016年(8)

我的朋友

分类: C/C++

2016-03-24 13:50:25

先贴一个下原题:
    设计一个算法将一个正整数划分成3个互不相同个素数之和,如果可以就输出这3个素数,否则输出错误信息。以下是代码内容:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <math.h>


  3. //定义1000以内的数
  4. #define t 1000
  5. //判断是否是素数
  6. bool issushu(int n){
  7.     int k = (int)sqrt(n);
  8.     int j;
  9.     for(j=2;j<=k;j++){
  10.         if(n%j != 0){
  11.         }else{
  12.             return false;
  13.         }
  14.     }
  15.     return true;
  16. }
  17. //分解用户输入的数字为三个互不相同的素数之和
  18. void fenjiesushu(int num) {
  19.     int i,m,n,l;
  20.     int j=0;
  21.     int count=0;
  22.     int count_keneng=0;
  23.     int sushu[t]={0};
  24.     for(i=2;i<num;i++) {
  25.         if(issushu(i)) {
  26.             sushu[j]=i;
  27.             count++;
  28.             j++;
  29.         }
  30.     }
  31.     for(m=0;m<count-2;m++) {
  32.         for(n=m+1;n<count-1;n++) {
  33.             for(l=n+1;l<count;l++) {
  34.                 if(num == sushu[l]+sushu[m]+sushu[n]) {
  35.                     count_keneng++;
  36.                     printf("三个数分别是:%d %d %d\n",sushu[m],sushu[n],sushu[l]);
  37.                 }
  38.             }
  39.         }
  40.     }
  41.     if(count_keneng==0) {
  42.         printf("没有这三个数\n");
  43.     }
  44. }


  45. int main() {
  46.     int number;
  47.     printf("please input a number:");
  48.     scanf("%d", &number);
  49.     printf("number:%d\n", number);
  50.     fenjiesushu(number);
  51.     return 0;
  52. }
有需要的同学,参考一下吧,写得不是够好,欢迎提出建议交流一下~

阅读(1807) | 评论(0) | 转发(0) |
0

上一篇:iptables

下一篇:编译uboot小记

给主人留下些什么吧!~~