C语言(枚举,DEVFORGE学编程社区)

Posted on 2019-09-18 17:40  金色的省略号  阅读(671)  评论(0编辑  收藏  举报

1、解不等式

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int a,b,n=1,n1;
 7     scanf("%d%d",&a,&b);
 8         
 9     double sum = 1, d = 1;
10     while(sum<=a || sum>=b)
11     {
12         n++;    
13         d += 1.0/n; //迭代除数d
14         sum += 1/d;  //累加        
15     }        
16     n1 = n;//保留区间下限值
17     
18     while(sum>a&&sum<b)
19     {    
20         n++;
21         d += 1.0/n; //迭代除数d
22         sum += 1/d;  //累加        
23     }
24     n--; //保留区间上限值
25     
26     printf("%d %d",n1,n);
27     return 0;
28 }

2、子序列的和

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int n,m;
 7     scanf("%d%d",&n,&m);
 8     
 9     double sum = 0,t=0.000001,d;
10         
11     for(int i=n; i<=m; ++i)
12     {
13         d = (i/1000.0)*(i/1000.0); //防止数据陷进
14         sum += t/d;
15     }    
16     
17     printf("%.5f",sum);
18     
19     return 0;
20 }

3、排列

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int fun(int *arr, int n)
 5 {
 6     int a = n%10, b = n/10%10,c = n/100;
 7     if(!a || !b || ++arr[a]>1 || ++arr[b]>1 || ++arr[c]>1)
 8         return 0;
 9     return 1;
10 }
11 
12 int main()
13 {
14     for(int i=123; 3*i<=987; ++i)
15     {        
16         int arr[10] = {0};
17         if(fun(arr,i)&& fun(arr,i*2) && fun(arr,i*3))
18             printf("%d %d %d\n",i,i*2,i*3);    
19     } 
20     return 0;
21 }

4、探索合数世纪

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int isPrime(int n)
 5 {
 6     for(int i=3; i<=sqrt(n); i+=2)
 7         if(n%i==0)
 8             return 0;
 9     return 1;        
10 }
11 
12 int main()
13 {
14     long a=1,b;
15     int n,m=0,s;
16     scanf("%d",&n);
17     
18     while(m!=n)
19     {
20         a++;    /*a世纪*/
21         s=100/2; /*a世纪100/2个奇数年号, 全部为合数, 为合数世纪*/
22         
23         for(b=a*100-99; !isPrime(b) && b<a*100; b+=2) /*枚举a世纪奇数年号b*/
24         {    
25             s--;  /*年号b为合数时,s--*/
26         }
27         
28         if(!s)   /*s为0, 是合数世纪 m++*/
29             m++;
30     }
31     
32     printf("%ld %ld\n",a*100-100,a*100-1);/*输出合数世纪起始年份*/
33 
34     return 0;
35 }

5、特殊整数

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int fun(int i, int m)/*计算是否含有m*/
 5 {
 6     while(i)
 7     {
 8         if(i%10 == m)
 9             return 1;
10         i /= 10;
11     }
12     return 0;
13 }
14 
15 int main()
16 {
17     int m,n,g=0;
18     long s=0;
19     scanf("%d%d",&m,&n);
20     
21     int t=n, a=1, b=0;/*计算n位数的起始位置a,b*/
22     while(t--)
23     {
24         a = a*10;
25         b = b*10 + 9;
26     }
27     
28     /*n位数的起始位置a,b*/
29     for(int i=a/10; i<b; ++i)
30     {
31         if(i%m && fun(i,m)){ /*不被m整除且含有m的数i*/
32             g++;
33             s+=i;
34         }        
35     }
36     
37     printf("%d %ld\n",g,s);
38 
39     return 0;
40 }

6、韩信点兵

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int fun(int a, int b, int c)
 5 {
 6     for(int i=10; i<100; ++i)
 7     {
 8         if(i%3==a && i%5==b && i%7==c)
 9             return i;
10     }
11     return -1;
12 }
13 
14 int main()
15 {
16     int a,b,c;
17     scanf("%d%d%d",&a,&b,&c);
18     printf("%d\n",fun(a,b,c));
19     return 0;
20 }

7、粒子裂变

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int a=1,b=0,t;
 7     scanf("%d",&t);
 8     
 9     while(t--)
10     {
11         int y1 = a;
12         int y2 = b;
13         
14         //1个a裂变3个b
15         b += 3*y1; 
16         
17         //1个b裂变1个a,2个b    
18         a += y2;   
19         b += 2*y2;
20         
21         //裂变消失的a,b
22         a -= y1; 
23         b -= y2; 
24     }
25     
26     printf("%d %d\n",a,b);
27     return 0;
28 }

8、最大乘积

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int n,s=1,x,max=0;
 7     scanf("%d",&n);
 8     
 9     while(n--)
10     {
11         scanf("%d",&x);
12         s*=x;
13         if(max<s)
14             max = s;
15     }
16     
17     if(max>0)
18         printf("%d\n",max);
19     else
20         printf("-1");
21     return 0;
22 }

9、分数拆分

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int k=4;
 7     scanf("%d",&k);
 8     
 9     for(int m=k*2; m>=2; --m)
10     {
11         for(int i=1; i<=k*2; ++i)
12         {
13             if(k*m*i%(k*m+i)==0 && k == k*m*i/(k*m+i)){
14                 printf("1/%d=1/%d+1/%d\n",k,k*m,i); 
15                 break;
16             }            
17         }
18     }
19         
20     return 0;
21 }

10、分数化小数

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int a,b,c;
 7     scanf("%d%d%d",&a,&b,&c);
 8       
 9     /*int n = a<b?a:b;
10     for(int i=n; i>0; --i)
11     {
12         if(a%i==0 && b%i==0){
13             a/=i,b/=i;
14             break;
15         }            
16     }*/
17     
18     int x = a%b;
19     if(a>b)
20         printf("%d.",a/b);
21     else
22         printf("0.");
23     
24     //if(x)
25     while(c--)
26     {    
27         x *=10;
28         printf("%d",x/b);
29         x %= b;
30     } 
31 
32     return 0;
33 }