连续整数和

 1 #include <stdio.h>                                                                                                  
 2 
 3 void show(unsigned int value, unsigned int start, unsigned seq_end)
 4 {
 5     int i = 0;
 6     printf("%d = %d + ", value, start);
 7     for(i = 1; i < seq_end; i++)
 8     {
 9         printf("%d + ", start + i);
10     }
11     printf("%d\n", start + seq_end);
12 }
13 
14 /*
15  * 功能:连续正整数和测试
16  *       若存在则输出相应的等式
17  *
18  * 返回:返回存在的组数,不存在则返回0
19  */
20 int integer_solve(unsigned value)
21 {
22     unsigned int start = 0;
23     unsigned int all_group = 0;
24     if(!(value &(value-1)))//2^n必定不满足
25     {
26         return 0;
27     }
28     for(start = 1; start <= (value/2);start++)//起始值必小于(value/2);
29     {
30         unsigned int count_start = 0;
31         unsigned int count_end = (value+1)/2 - start;//终值必小于(value+1)/2,获得最多测试项数
32         unsigned int sum = 0;
33         for(count_start = 1; count_start <= count_end; count_start++)
34         {
35             sum = (2 * start + count_start) * (count_start + 1)/2;
36             if(sum >= value)
37                 break;
38             sum = 0;
39         }
40         if(sum)
41         {
42             if(sum == value)
43             {
44                 all_group++;
45                 show(value, start, count_start);
46             }
47         }
48     }
49     return all_group;
50 }
51 
52 int main(void)
53 {
54     int i = 0;
55     for(i = 0; i <= 100; i++)
56     {
57         unsigned int all_group = 0;
58         all_group = integer_solve(i);
59         if(all_group)
60         {
61             printf("********************************\n");
62             printf("********************************\n");
63         }
64     }
65     return 0;

 

posted on 2013-03-23 10:53  阿加  阅读(180)  评论(0编辑  收藏  举报

导航