C/C++之练习题1-3

来源:互联网 发布:移动网络代理服务器 编辑:程序博客网 时间:2024/05/22 00:33

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include<stdio.h>#include<stdlib.h> int main(){       int i,j,k,count=0;       printf("\n");       for(i = 1;i<5;i++){             for(j=1;j<5;j++){                      for(k = 1;k<5;k++){                            if(i!=k && i!=j &&j!=k){                                    printf("%d,%d,%d\n",i,j,k);                                    count++;                                    }                            }                              }             }         printf("一共多少个%d",count);                system("pause");                return 0;        }

【程序2】
题目:

企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于
10万元,低于20万元时,低于10万元的部分按10%提成,高于 10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

#include<stdio.h>#include<stdlib.h>    double function(int bonus){             double sum;               double bonus1,bonus2,bonus3,bonus4,bonus5,bonus6;               bonus1 = 100000*0.1;            bonus2 =  100000*0.075;            bonus3 = 200000*0.05;            bonus4 = 200000*0.03;            bonus5 = 400000*0.015;         printf("%0.2lf,%0.2lf,%0.2lf,%0.2lf,%0.2lf",bonus1,bonus2,bonus3,bonus4,bonus5);             if(bonus<=100000){                    sum =  bonus*0.1 ;                         }             else if(bonus<=200000){                    sum =  bonus1  + (bonus-100000)*0.075 ;                         }            else if(bonus<=400000){                    sum =  bonus1  + bonus2 +(bonus-200000)*0.05;                         }         else if(bonus<=600000){                    sum =  bonus1  + bonus2 +bonus3+  (bonus-400000)*0.03;                         }         else if(bonus<=1000000){                    sum =  bonus1  + bonus2 +bonus3+  bonus4+  (bonus-600000)*0.015;                         }        else   if(bonus>1000000){                    sum =  bonus1  + bonus2 +bonus3+  bonus4+  bonus5+(bonus-1000000)*0.01  ;                         }             return sum;                      } int main(){             double sum,i;            int k;        for(k=1;;k++){            printf("请输入利润进行提成计算:");            scanf("%lf",&i);              sum =  function(i);               printf("获得提成:%0.2lf\n",sum);               }                system("pause");                return 0;        }

这里写图片描述

【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:

#include<stdio.h>#include<stdlib.h>#include<math.h>/***第一种方式    //开方结果,再平方结果,相等返回true     bool function(int number){        bool flag = false;        int sum = 0;      sum = sqrt(number);              flag = (number == sum*sum);             return flag;                      }           ***************/    /**                  //计算结果小于100268的平方数,一共是316个数再减去268 ,再减去16个也就是有32个数需要计算,根本不需要计算十万个             int function1(){                int j;             printf("输出10万以内平方少于100268的数:\n");               for(j= sqrt(268);j<sqrt(100268);j++){                       printf("j = %ld\t",j);                       if(0 == j%10){                           printf("\n");                           }                      }                    printf("输出最后的j是等于%ld\n",--j);                      return j;                 }       **/               /*******************************************************/               //反向计算,平方再减去100 和平方减去268 如果等于同一个数,则为完全平方数              void   function2(){              //给两个数组存储平方数结果 一个减去一百,一个减去268,比较两个数组中的数据,相同者为符合的数                   int sum,q,p = 0 ;                  int k,m,count,g;                  int a[316],b[316];              //  sum =  functio1();              //   sum-sqrt(268),k初始值是16, 平方是256,256-100 = 156                   k = sqrt(100);                  sum =sqrt(100268);                  for(q =k;q<=sum;q++){                    a[p] =q*q-100;                     b[p]=q*q-268;                                //   printf("输出最后的a是等于%d\t",a[p]);                               //   printf("输出最后的b是等于%d\n",b[p]);                              p++;                        }                     printf("输出最后的需要比较的个数p是等于%d\t",p);                     //两个数组进行比较,相同的则写入到新的数组中                      printf("数组a是等于多长%d\n",sizeof(a)); //1264也就是316的4倍?因为int占4                        printf("数组b[6]是等于%d\n",b[6]); //1264也就是316的4倍?因为int占4                        printf("数组b[7]是等于%d\n",b[7]); //1264也就是316的4倍?因为int占4                         printf("数组a[0]是等于%d\n",a[0]); //1264也就是316的4倍?因为int占4                       int len = sizeof(a)/sizeof(int);//                       len = sum - k;                          for(count = 7; count<=len;count++){                                 //很明显的一件事是a[0]比b[0]大168,也就是说比较的时候,可以略过一些没必要的比较 ,                                 // 估算一下 可以跳过,10....16,17,18,19 ,20,是可以跳过不比较的                                     for(g=1;g<=len;g++){                                               if(b[count]==a[g]){                                                printf("符合的数为:%d\n",b[count]);                                                                    }                                      }                                       }                 //返回的数减一百或者268都行             } /****** 第一种方式  int main(){             int i;             printf("开始计算10万以内符合要求的数\n");       for(i=1;i<100000;i++){                                     if(function(i+100)){                                  if(function(i+268)){                printf("符合的数:i = %ld\n",i);               }                           }                                          }                function1();                system("pause");                return 0;        }        *****/   //第二种方式         int main(){             printf("开始计算10万以内符合要求的数\n");               function2();                system("pause");                return 0;        }

这里写图片描述

0 0
原创粉丝点击