zoukankan      html  css  js  c++  java
  • [转贴]C语言复习笔记-17种小算法-解决实际问题

    判断日期为一年中的第几天(考虑闰年)

    复制代码
     1 /*
     2 * 计算该日在本年中是第几天,注意闰年问题
     3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天
     4 * 特殊情况,闰年且输入月份大于3时需考虑多加一天
     5 */
     6 
     7 /*
     8 *@author: 成鹏致远 
     9 *@net: http://infodown.tap.cn
    10 */
    11 
    12 #include <stdio.h>
    13 #include <stdbool.h>
    14 
    15 struct year_mon_day
    16 {
    17     int year;
    18     int mon;
    19     int day;
    20 };
    21 
    22 int main()
    23 {
    24     int i;
    25     int sum;//总天数
    26     bool flag = false;//闰年标志
    27     struct year_mon_day ymd;
    28     
    29     printf("Pls input year,mon day:");
    30     scanf("%d%d%d",&ymd.year,&ymd.mon,&ymd.day);
    31     
    32     switch(ymd.mon)
    33     {
    34         case 1:
    35             sum = 0;
    36             break;
    37         case 2:
    38             sum = 31;
    39             break;
    40         case 3:
    41             sum = 59;
    42             break;
    43         case 4:
    44             sum = 90;
    45             break;
    46         case 5:
    47             sum = 120;
    48             break;
    49         case 6:
    50             sum = 151;
    51             break;
    52         case 7:
    53             sum = 181;
    54             break;
    55         case 8:
    56             sum = 212;
    57             break;
    58         case 9:
    59             sum = 243;
    60             break;
    61         case 10:
    62             sum = 173;
    63             break;
    64         case 11:
    65             sum = 304;
    66             break;
    67         case 12:
    68             sum = 334;
    69             break;
    70         default:
    71             printf("data error 
    ");
    72             return 1;
    73     }
    74     sum += ymd.day;
    75 
    76     if(ymd.year/100 || (ymd.year%4 && ymd.year%100 != 0))
    77     {
    78         flag = true;
    79     }
    80     
    81     if(1==flag && ymd.mon>2)
    82     {
    83         sum++;
    84     }
    85 
    86     printf("%d年%d月%d日 是%d年的第%d天 
    ",ymd.year,ymd.mon,ymd.day,ymd.year,sum);
    87 
    88     return 0;
    89 }
    复制代码

    十进制转十六进制

    复制代码
     1 /*函数实现输入一个十进制数,输出对应的十六进制数*/
     2 /*
     3 *@author: 成鹏致远 
     4 *@net: http://infodown.tap.cn
     5 */
     6 
     7 #include <stdio.h>
     8 #include <stdbool.h>
     9 #define LIM 32
    10 
    11 int main(void)
    12 {
    13     int decimal;
    14     bool negative = false;
    15     printf("pls input the integer to convert:
    ");
    16 
    17     if(!scanf("%d", &decimal))
    18     {
    19         printf("we need an integer, Bye-bye!
    ");
    20         return -1;
    21     }
    22     if(decimal < 0)
    23     {
    24         negative = true; 
    25         decimal *= -1;
    26     }
    27 
    28     int i, num[LIM];
    29     for(i=0; i<LIM && decimal!=0; i++)
    30     {
    31         num[i] = decimal%16;
    32         decimal /= 16;
    33     }
    34 
    35     int j;
    36     if(negative)
    37         printf("answer: -0x");
    38     else
    39         printf("answer: 0x");
    40 
    41     for(j=i; j>0; j--){
    42         switch(num[j-1]){
    43             case 10:
    44                 printf("a");
    45                 break;
    46             case 11:
    47                 printf("b");
    48                 break;
    49             case 12:
    50                 printf("c");
    51                 break;
    52             case 13:
    53                 printf("d");
    54                 break;
    55             case 14:
    56                 printf("e");
    57                 break;
    58             case 15:
    59                 printf("f");
    60                 break;
    61             default:
    62                 printf("%d", num[j-1]);
    63                 break;
    64         } //switch
    65     } //for
    66     printf("
    ");
    67 
    68     return 0;
    69 }
    复制代码

    打印指定的字母金字塔(技巧)

    复制代码
     1 /*
     2 *    产生一个字母金字塔图案
     3 *    author:成鹏致远
     4 *    net:infodown.tap.cn
     5 */
     6 
     7 #include <stdio.h>
     8 
     9 void PintLetterPic(char);    //打印出金字搭字母图案
    10 
    11 int main()
    12 {
    13     char letter;
    14 
    15     printf("Please input a capital letter:");
    16     scanf("%c",&letter);
    17     
    18     PintLetterPic(letter);
    19 
    20     return 0;
    21 }
    22 
    23 void PintLetterPic(char c)    //打印出金字搭字母图案
    24 {
    25     int len = c - 'A'+1;    //注意这里需要+1!!!
    26     int len2 = 2*len;
    27     char tem[100][200];
    28     int i,j;
    29     char tempchar = 'A';
    30 
    31     for(i=0; i<100; i++)    //初始化二维数组
    32     {
    33         for(j=0; j<200; j++)
    34         {
    35             tem[i][j] = ' ';
    36         }
    37     }
    38 /*******************************核心算法*********************************************/    
    39 
    40     for(i=0; tempchar<=c; i++,tempchar++)//从最中间列从上往下控制行
    41     {
    42         int m = 1;
    43         char temp = tempchar;    //需要保存tempchar的一个临时变量,保证tempchar在while循环中不被改变
    44         tem[i][len] = tempchar;    //控制最中间的一列
    45 
    46 
    47         while('A' != temp)    //从行最中间左右控制列
    48         {
    49             tem[i][len-m]=tem[i][len+m]=--temp;
    50             m++;
    51         }
    52     }
    53 
    54 /*******************************核心算法*********************************************/    
    55 
    56 
    57     for(i=0; i<len; i++)    //打印出金字塔图案
    58     {
    59         for(j=0; j<len2; j++)
    60         {
    61             printf("%c",tem[i][j]);
    62         }
    63         printf("
    ");
    64     }
    65 }
    复制代码

    求float型数的幂

    复制代码
     1 /*用循环的方法实现,返回一个float 类型数的某个整数次幂,保留六位小数*/
     2 /*
     3 *@author: 成鹏致远 
     4 *@net: http://infodown.tap.cn
     5 */
     6 
     7 #include <stdio.h>
     8 #include <math.h>
     9 
    10 float my_power(float cardinal, int pow);    //返回cardinal的pow次幂
    11 
    12 int main()
    13 {
    14     float cardinal;    //底数
    15     int pow;    //
    16 
    17     printf("Please input a float cardinal and a int pow(3.14,-2):");
    18     scanf("%f,%d",&cardinal,&pow);
    19 
    20     printf("%f的%d次幂是:%.6f 
    ",cardinal,pow,my_power(cardinal,pow));
    21 
    22     return 0;
    23 }
    24 
    25 float my_power(float cardinal, int pow)
    26 {
    27     float result = 1.0;
    28     int abs_pow = abs(pow);
    29 
    30     if(0 != abs_pow)    //非0次幂
    31     {
    32         while(abs_pow--)
    33         {
    34             result *= pow>0?cardinal:1/cardinal;
    35         }    
    36     }
    37     else    //0次幂
    38     {
    39         result =1;
    40     }
    41     return result;
    42 }
    复制代码

    输出小于指定数的所有素数

    复制代码
     1 /*
     2 *    接受一个整数输入,然后显示所有小于或等于该数的素数
     3 *    编译时请加 -lm 选项,链接到 math 库
     4 *    author:成鹏致远
     5 *    net:infodown.tap.cn
     6 */
     7 
     8 #include <stdio.h>
     9 #include <stdbool.h>
    10 #include <math.h>
    11 
    12 bool IsPrime(int a);//判断是否为素数
    13 void PoutPrime(int a);//输出所有小于或等于该数的素数
    14 
    15 int main()
    16 {
    17     int nem;
    18 
    19     printf("Please input a number:");
    20     scanf("%d",&nem);
    21 
    22     PoutPrime(nem);
    23 
    24     return 0;
    25 }
    26 
    27 bool IsPrime(int a)//判断是否为素数
    28 {
    29     int i;
    30     int j = sqrt(a);
    31 
    32     for(i=2; i<=j; i++)
    33     {
    34         if(0 == a % i)
    35         {
    36             return false;
    37         }
    38     }
    39     return true;
    40 }
    41 
    42 void PoutPrime(int a)//输出所有小于或等于该数的素数
    43 {
    44     printf("小于或等于%d 的所有素数列表:	",a);
    45     while(a)
    46     {
    47         if(IsPrime(a))
    48         {
    49             printf("%d	",a);
    50         }
    51         a--;
    52     }
    53     printf("
    ");
    54 }
    复制代码

    辗转相除法求最大公约数(铺砖)

    复制代码
     1 /*
     2 * 返回两个整数的最大公约数,用辗转相除法求最大公约数
     3 * 辗转相除法:铺地砖
     4 * author:成鹏致远
     5 * net:infodown.tap.cn
     6 */
     7 
     8 #include <stdio.h>
     9 
    10 int Divisor(int a, int b)    //最大公约数
    11 {
    12     int temp;
    13 
    14     if(a < b)
    15     {
    16         a = a ^ b;
    17         b = a ^ b;
    18         a = a ^ b;
    19     }
    20     while(0 != b)
    21     {
    22         temp = a % b;
    23         a = b;
    24         b = temp;
    25     }
    26     return a;    //最大公约数
    27                 //最大公倍数为两数的乘积除以最大公约数
    28 }
    29 
    30 int main()
    31 {
    32     int a,b;
    33 
    34     printf("Please input two numbers:");
    35     scanf("%d%d",&a,&b);
    36 
    37     printf("%d 和%d 的最大公约数是%d 
    ",a,b,Divisor(a,b));
    38 }
    复制代码

    递归实现汉诺塔(递归思想)

    复制代码
     1 /*
     2 * 递归实现汉诺塔
     3 * @author:成鹏致远
     4 * @net:infodown.tap.cn
     5 */
     6 
     7 #include <stdio.h>
     8 
     9 void move(char a, char b)//实现汉诺塔的移动
    10 {
    11     printf("%c—>%c 
    ",a,b);
    12 }
    13 
    14 
    15 /*
    16 * 功 能: 递归实现汉诺塔
    17 * n    : 盘子个数
    18 * a,b,c: 三个盘座
    19 */
    20 void han_tower(int n, char a, char b, char c)
    21 {
    22     if(1==n)
    23     {
    24         move(a,c);
    25     }
    26     else
    27     {
    28         //将前n-1个盘子从a借助c移动到b
    29         han_tower(n-1,a,c,b);
    30         //将a上的第n个盘子移动到c
    31         move(a,c);
    32         //将剩下的n-1个盘子从b借助a移动到c
    33         han_tower(n-1,b,a,c);
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     int num;
    40 
    41     printf("Pls input the number of diskes:");
    42     scanf("%d",&num);
    43     printf("the step to moving %d diskes: 
    ",num);
    44     han_tower(num,'A','B','C');
    45 
    46     return 0;
    47 }
    复制代码

    乒乓球比赛对手配对(匹配)

    复制代码
     1 /*
     2 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
     3     比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
     4     三队赛手的名单。 
     5 */
     6 
     7 /*
     8 *  @author: 成鹏致远 
     9 *  @net: http://infodown.tap.cn
    10 */
    11 
    12 #include <stdio.h>
    13 
    14 int main(void)
    15 {
    16     char i,j,k;
    17     for(i='x';i<='z';i++)//a对手
    18     {
    19         for(j='x';j<='z';j++)//b对手
    20         {
    21             if(i!=j)//a,b同对
    22             {
    23                 for(k='x';k<='z';k++)//c对手
    24                 { 
    25                     if(i!=k&&j!=k)//a,b,c同对
    26                     { 
    27                         if(i!='x' && k!='x' && k!='z')//a不和x比,c不和x,z比
    28                             printf("order is a--%c	b--%c	c--%c 
    ",i,j,k);
    29                     }
    30                 }
    31             }
    32         }
    33     }
    34     
    35     return 0;
    36 }
    复制代码

    函数区间求最大值(方法)

    复制代码
     1 /*
     2 编程:设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)- cos(x)的最大值
     3 要求使用自定义函数实现f(x)功能
     4 */
     5 
     6 /*
     7 *  @author: 成鹏致远 
     8 *  @net: http://infodown.tap.cn
     9 */
    10 
    11 #include "stdio.h"
    12 #include "math.h"
    13 double f()
    14 {
    15    int i;
    16    double max=0,x;
    17    for(i=1;i<=20;i++)
    18    {
    19      x=i-sin(i)-cos(i);
    20      if(x-max>1e-6)
    21        max=x;
    22    }
    23    return max;
    24 
    25 }
    26 main()
    27 {
    28     printf("%lf",f());
    29     getchar();
    30 }
    复制代码

    分解质因数

    复制代码
     1 /*
     2 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
     3 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
     4 (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
     5 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
     6   重复执行第一步。
     7 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
     8 */
     9 
    10 #include <stdio.h>
    11 #include <math.h>
    12 
    13 main()
    14 {
    15     int n,i;
    16     printf("please input a number:
    ");
    17     scanf("%d",&n);
    18     printf("%d=",n);
    19     for(i=2;i<=sqrt(n);i++)
    20     {
    21         while(n!=i)
    22         {
    23             if(n%i==0)
    24             {
    25                 printf("%d*",i);
    26                 n=n/i;
    27             }
    28             else
    29                 break;
    30         }
    31     }
    32     printf("%d 
    ",n);
    33 }
    复制代码

    古代买鸡问题

    复制代码
     1 /*
     2 编程解决如下问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
     3 百钱买百鸡,问鸡翁,鸡母,鸡雏各几何?
     4 
     5 解决方案:数学问题,先用数学方法解决
     6 1、设鸡翁、鸡母、鸡雏分别a、b、c只
     7 2、5a+3b+c/3=100
     8 3、a+b+c=100
     9 4、解得:b=(100-7*a)/4;
    10        c=(300+3*a)/4;
    11 
    12 */
    13 
    14 /*
    15 *  @author: 成鹏致远 
    16 *  @net: http://infodown.tap.cn
    17 */
    18 
    19 #include<stdio.h>
    20 
    21 void main()
    22 {
    23     int a,b,c;
    24     for(a=0;a<20;a++)
    25     {
    26         b=(100-7*a)/4;
    27         c=(300+3*a)/4;
    28         if(a+b+c==100&&a>=0&&b>=0&&c>=0)
    29         {
    30                 printf("%d,%d,%d
    ",a,b,c);
    31         }
    32     }
    33 }
    复制代码

    字符串交叉连接

    复制代码
     1 //输入两个字符串,要求将这两个字符串交叉连接。如串1为"ABCD",串2为"123456",则合并后的串为"A1B2C3D456"。
     2 
     3 /*
     4 *  @author: 成鹏致远 
     5 *  @net: http://infodown.tap.cn
     6 */
     7 
     8 #include<stdio.h>
     9 #include<stdlib.h>   
    10 void main()
    11 {
    12     char a[20],s[20],*p1,*p2;
    13     gets(a);
    14     gets(s);
    15     p1=a;
    16     p2=s;
    17     while(1)
    18     {
    19         if(*p1!='')
    20         {    
    21             printf("%c",*p1);p1++;
    22         }
    23         if(*p2!='')
    24         {
    25             printf("%c",*p2);
    26             p2++;
    27         }
    28         if(*p1=='' && *p2=='')
    29             exit(0);
    30     }
    31 }
    复制代码

    完数

    复制代码
     1 /*
     2 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
     3     找出1000以内的所有完数。
     4 */
     5 
     6 /*
     7 *  @author: 成鹏致远 
     8 *  @net: http://infodown.tap.cn
     9 */
    10 
    11 #include <stdio.h>
    12 
    13 int main(void)
    14 {
    15     static int k[10];
    16     int i,j,n,s;
    17     for(j=2;j<1000;j++)
    18     {
    19         n=-1;
    20         s=j;
    21         for(i=1;i<=j/2;i++)
    22         {
    23             if((j%i)==0) //因子
    24             {
    25                 n++;
    26                 s=s-i; //减到0则是完数
    27                 k[n]=i;
    28             }
    29         }
    30         if(s==0)
    31         {
    32             printf("%d 是一个完数 
    %d=",j,j);
    33             for(i=0;i<n;i++)
    34                 printf("%d+",k[i]);
    35             printf("%d 
    ",k[n]);
    36         }
    37     }
    38 
    39     return 0;
    40 }
    复制代码

    容器分水移动(算法)

    复制代码
     1 /*
     2 编程解决如下数学问题:有12升水,怎样利用一个8升
     3 和一个5升的容器将水分为两个6升?要求以如下格式
     4 打印出分水步骤。
     5 a12  b8  c5
     6 12   0   0
     7 *    *   * ( “*”表示当前状态下每个容器的盛水量)
     8 ......
     9 6   6   0
    10 */
    11 
    12 /*
    13 *  @author: 成鹏致远 
    14 *  @net: http://infodown.tap.cn
    15 */
    16 
    17 #include <stdio.h>
    18 
    19 
    20 void move(int *ai,int *aj,int aiContainer,int ajContainer) //将油从一个容器导倒入另外一个容器
    21 {      //移动容器目前盛水量,接收容器目前盛水量,移动容器容量,接收容器容量
    22 
    23     if(aiContainer>ajContainer) //移动容器容量>接收容器容量
    24     {
    25         if(*ai+*aj>ajContainer) //将油倒入接收容器中,移动容器有剩余
    26         {
    27             *ai=*ai-(ajContainer-*aj);
    28             *aj=*aj+ajContainer-*aj;
    29         }
    30         else //将油倒入接收容器中,移动容器无剩余
    31         {
    32             *aj=*ai+*aj; 
    33             *ai=*ai-*ai;
    34         }
    35     }
    36     else //移动容器容量<接收容器容量,则全部倒入接收容器中
    37     {
    38         *aj=*ai+*aj;
    39         *ai=0;
    40     }
    41 }
    42 
    43 int main(void)
    44 {
    45     int a[3]={12,0,0},i,m=0;
    46     int container[3]={12,8,5};
    47     printf("%-8s%-8s%-8s
    ","a12","b8","c5");
    48     printf("%-8d%-8d%-8d
    ",a[0],a[1],a[2]);
    49     while(a[0]!=6)
    50     {
    51         for(i=0;i<3;i++)//循环三次,分别从a->b,b->c,c->a
    52         {
    53             move(&a[i],&a[(i+1)%3],container[i],container[(i+1)%3]);
    54             m++;
    55             printf("%-8d%-8d%-8d
    ",a[0],a[1],a[2]);
    56             if(a[0]==6 && a[1]==6)
    57             {
    58                 printf("The total number is %d to reach success!",m);
    59                 getchar();
    60                 return 0;
    61             }
    62         }
    63         move(&a[1],&a[2],container[1],container[2]);//b->c
    64         printf("%-8d%-8d%-8d
    ",a[0],a[1],a[2]);
    65         m++;
    66         if(a[0]==6 && a[1]==6)
    67         {
    68             printf("The total number is %d to reach success!",m);
    69             break;
    70         }
    71     }
    72     getchar();
    73     return 0;
    74 }
    复制代码

    猴子吃桃问题(逆向思维)

    复制代码
     1 /*
     2 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
     3     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
     4     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
     5 1.程序分析:采取逆向思维的方法,从后往前推断。
     6 */
     7 
     8 /*
     9 *  @author: 成鹏致远 
    10 *  @net: http://infodown.tap.cn
    11 */
    12 
    13 #include <stdio.h>
    14 
    15 int main(void)
    16 {
    17     int day,x1,x2;
    18     day=9;
    19     x2=1;
    20     while(day>0)
    21     {
    22         x1=(x2+1)*2;
    23         x2=x1;
    24         day--;
    25     }
    26     printf("the total is %d 
    ",x1);
    27 
    28     return 0;
    29 }
    复制代码

    统计字符数字等

    复制代码
     1 /*
     2 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
     3 */
     4 
     5 /*
     6 *  @author: 成鹏致远 
     7 *  @net: http://infodown.tap.cn
     8 */
     9 
    10 #include <stdio.h>
    11 
    12 int main(void)
    13 {
    14     char c;
    15     int letters=0,space=0,digit=0,others=0;
    16     printf("please input some characters: 
    ");
    17     while((c=getchar())!='
    ')
    18     {
    19         if(c>='a'&&c<='z'||c>='A'&&c<='Z')
    20             letters++;
    21         else if(c==' ')
    22             space++;
    23         else if(c>='0'&&c<='9')
    24             digit++;
    25         else
    26             others++;
    27     }
    28     printf("all in all:char=%d space=%d digit=%d others=%d 
    ",letters,space,digit,others);
    29 
    30     return 0;
    31 }
    复制代码

    贪心算法用例(够纠结的)

    复制代码
      1 /*
      2 编程解决如下问题。
      3   请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
      4   (1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;
      5   (2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
      6   (提示:整数n可以以字符数组的方式定义、赋值和处理)
      7 
      8   编写思路:
      9   在前9位数字中寻找最小数字a1,记下该最小数字的位置b1,a1前面所有数字是该删除的,
     10   个数m=b1-1,然后从a1后面开始继续操作,变为删除8-m个数字,从a1后8-m+1个数字中找最小值a2,
     11   记下b2,删除a1与a2之间的数字,个数b2-b1-1。m=m+b2-b1-1.如此下去直至m=8,停止操作,
     12   输出a1a2……及最后一个a和之后的数字。
     13 
     14   程序一是正确的,程序二是错误的
     15   一和二的差别主要是在删除字符序列的顺序上
     16 */
     17 
     18 /*
     19 *  @author: 成鹏致远 
     20 *  @net: http://infodown.tap.cn
     21 */
     22 
     23 //程序一:贪心算法
     24 
     25 #include <string.h>
     26 #include <stdio.h>
     27 
     28  int main()
     29 {
     30   int i,m=8,t=0;
     31   char p[10];
     32   char s[]="742683613984";
     33   for (i=0;i<12;i++)
     34   {
     35         while(t&&p[t-1]>s[i]&&m) //用p数组中的每一个元素和当前s[i]比较
     36         {
     37             t--,m--; //进入循环意味着s[i]比p[--t]小,需要将p[--t]输出,并且m-1
     38             printf("%c",p[t]);
     39             if(m) //未删除所有符合条件的元素之前,用逗号将各元素分开
     40             printf(",");
     41         }
     42         p[t++]=s[i]; //p数组依次暂存前一位比后一位小的数字
     43   } //循环结束后p数组中存储着最小的四位数
     44         p[t]=0; //字符数组结束
     45         printf("
    ");
     46         puts(p);
     47         return 0;
     48 }
     49         
     50           
     51  
     52 /*
     53 //程序二:这个是错误的,程序一和程序二的差别在删除字符序列的顺序
     54 
     55     #include <stdio.h>
     56     #include <stdlib.h>
     57     
     58      void main()
     59      {
     60          char *s="742683613984";
     61          printf("%s
    ",s); 
     62          //去掉8个相当于取4个
     63          int a,b,c,d;//下标
     64          int aa,bb,cc,dd;//某位数字
     65          int ka,kb,kc,kd;//最小值对应的下标
     66          int min=10000;//当取4个时,设定初始最小值为5位数
     67          int num;//组和的值
     68          for(a=0;a<=8;a++)
     69          {
     70              for(b=1;b<=9;b++)
     71              {
     72                  for(c=2;c<=10;c++)
     73                  {
     74                      for(d=3;d<=11;d++)
     75                      {
     76                          if((a<b)  && (b<c) && (c<d)  )//保证不重复和先后顺序
     77                          {
     78                              aa=s[a]-'0';bb=s[b]-'0';cc=s[c]-'0';dd=s[d]-'0';//字符型转换为整数
     79                              num=aa*1000+bb*100+cc*10+dd;//求组和数
     80                              if (num<min)//选择最小值以及下标
     81                              {
     82                                  min=num;
     83                                  ka=a;kb=b;kc=c;kd=d;//最小值对应的下标
     84                              }
     85                          }
     86                      }
     87                  }
     88              }
     89         }
     90      
     91      for(int i=0;i<=11;i++)//输出去掉的数
     92      {
     93          if(i!=ka && i!=kb && i!=kc && i!=kd)
     94              printf("%c	",s[i]); 
     95      }
     96      printf("
    %d
    ",min);//输出最小值 
     97      system("pause");
     98 }
     99 
    100 
    101 */
    102   
  • 相关阅读:
    【Ubuntu】set参数介绍
    【英语学习】第14周翻译练习之日本教育
    【英语学习】第13周翻译练习之自然光照对工作的影响
    【英语学习】第12周翻译练习之出国交流心得
    【英语学习】第11周翻译练习之网上购物
    【英语学习】第9周翻译练习之大学专业
    【英语学习】第10周翻译练习之博物馆是否应当免费开放
    数据结构与算法之选择排序(C++)
    数据结构与算法之冒泡排序(C++)
    机械臂开发之DH模型
  • 原文地址:https://www.cnblogs.com/redmondfan/p/3209283.html
Copyright © 2011-2022 走看看