C语言经典算法题_c 语言算法题-程序员宅基地

技术标签: C/C++  算法  C语言  后端开发  

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

#include <stdio.h>
int main(){
  int i,j,k;
  printf("\n");
  for(i=1;i<5;i++){
    for(j=1;j<5;j++){
      for(k=1;k<5;k++){
        if(i!=j&&j!=k&&i!=k){
          printf("%d,%d,%d",i,j,k);
          printf("\n");
        }
      }
    }
  };
  return 0;
}

2. 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?

#include "math.h"
#include "stdio.h"

int main(){
  long int i,a,b,x,y;
  for(i=1;i<100000;i++){
    a = i+100;
    b = i+168;
    // 注意转换类型,否则报错
    x = sqrt((float)a);
    y = sqrt((float)b);
    if(x*x ==a && y*y==b){
      printf("\n%ld\n",i);
    }
  };
  return 0;
}

3. 企业发放的奖金根据利润提成。利润低于或等于10万元时按10%提成;利润在10万到20万之间的部分按7.5%提成;利润在20万到40万之间的部分按5%提成;利润在40万到60万之间的部分按3%提成;利润在60万到100万之间的部分按1.5%提成;高于100万的部分按1%提成。从键盘输入当月利润,求应发放奖金总数?

#include "stdio.h"

int main(){
  int bonus;
  int bonus1 = 100000*0.1;
  int bonus2 = bonus1 + (200000-100000)*0.075;
  int bonus4 = bonus2 + (400000-200000)*0.05;
  int bonus6 = bonus4 + (600000-400000)*0.03;
  int bonus10 = bonus6 +(1000000-600000)*0.015;

  long int i;
  scanf("%ld",&i);
  if(i<=100000){
    bonus = i*0.1;
  }else if(i<=200000){
    bonus = bonus1+(i-100000)*0.075;
  }else if(i<=400000){
    bonus = bonus2+(i-200000)*0.05;
  }else if(i<=600000){
    bonus = bonus4+(i-400000)*0.03;
  }else if(i<=1000000){
    bonus = bonus6+(i-600000)*0.015;
  }else{
    bonus = bonus10+(i-1000000)*0.01;
  };
  printf("bonus=%d",bonus);

  return 0;
}

4. 输入某年某月某日,判断这一天是这一年的第几天?

#include "stdio.h"

int main(){
  int year ,month,day,sum;
  printf("\n 请输入年月日 \n");
  scanf("%d,%d,%d",&year,&month,&day);
  switch(month){
    case 1:sum=0;break;
    case 2:sum=31;break;
    case 3:sum=31+28;break;
    case 4:sum=31+28+31;break;
    case 5:sum=31+28+31+30;break;
    case 6:sum=31+28+31+30+31;break;
    case 7:sum=31+28+31+30+31+30;break;
    case 8:sum=31+28+31+30+31+30+31;break;
    case 9:sum=31+28+31+30+31+30+31+31;break;
    case 10:sum=31+28+31+30+31+30+31+31+30;break;
    case 11:sum=31+28+31+30+31+30+31+31+30+31;break;
    case 12:sum=31+28+31+30+31+30+31+31+30+31+30;break;
    default:printf("input error");break;
  };
  sum = sum+day;
  if(year%400==0 || (year%4==0&&year%100!=0)){
    if(month>2){
      sum++;
    };
  };
  printf("当前是第%d天",sum);
  return 0;
}

5. 输入三个整数,把这三个数由小到大输出。

#include "stdio.h"
int main() {
  int x,y,z,t;
  scanf("%d%d%d",&x,&y,&z);
  if(x>y){
    t=x;x=y;y=t;
  };
  if(x>z){
    t=x;x=z;z=t;
  };
  if(y>z){
    t=y;y=z;z=t;
  };
  printf("small to big:%d,%d,%d",x,y,z);
  return 0;
}

6. 输出九九乘法口决表。

#include "stdio.h"
int main() {
  int i,j,result;
  for(i=1;i<10;i++){
    for(j=1;j<=i;j++){
      result = i*j;
      printf("%d*%d=%-3d",i,j,result);
    };
    printf("\n");
  }
  return 0;
}

7. 输出国际象棋棋盘。

#include "stdio.h"
int main() {
  int i,j;
  for(i=0;i<8;i++){
    for(j=0;j<8;j++){
      if((i+j)%2==0){
        printf("️");
      }else{
        printf(" ");
      };
    };
    printf("\n");
  }
  return 0;
}

8. 古典问题:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数是多少?

分析:前两个数之和为第三个数的值,即有名的斐波那契数列。

#include "stdio.h"
int main(){
  int i;
  long f1, f2;
  f1 = f2 = 1;
  for (i = 1; i < 20; i++){
    printf("%12ld%12ld", f1, f2);
    // 每行4个,然后换行
    if(i%2==0){
      printf("\n");
    };
    f1=f1+f2;
    f2=f1+f2;
  }
  return 0;
}

9. 判断2到200之间有多少个素数,并输出所有素数。

分析:判断素数的方法,用一个数分别去除2到这个数的开平方,如果能被整除,则表明此数不是素数,反之是素数。

#include "math.h"
#include "stdio.h"

int main(){
  int h=0,leap=1;
  for(int m=2;m<200;m++){
    int k=sqrt(m);
    for(int i=2;i<=k;i++){
      if(m%i==0){
        leap=0;
        break;
      }
    };
    if(leap){
      printf("%d\n",m);
      h++;
    };
    leap=1;
  };
  printf("素数一共有%d个\n",h);
  return 0;
}

10. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153等于1的三次方加上5的三次方加上3的三次方。

#include "stdio.h"
int main(){
  int i,j,k,n;
  for(n=100;n<1000;n++){
    // 分解出百位数
    i = n/100;
    // 分解出十位数
    j = n/10%10;
    // 分解出个位数
    k = n%10;
    if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k)){
      printf("%-5d",n);
    }
  }
  return 0;
}

11. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

分析:对n进行分解质因数,应先找到最小的质数i,然后按下步骤执行:

(1). 如果这个质数等于n,则说明分解质数的过程已经结束,打印出即可;

(2). 如果n不等于i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数n,重复执行;

(3). 如果n不能被i整除,将i+1作为新的i值与n进行相除计算;

#include "stdio.h"
int main(){
  int n,i;
  scanf("%d",&n);
  printf("%d=",n);
  for(i=2;i<n;i++){
    while (n!=i){
      if(n%i==0){
        printf("%d*",i);
        n=n/i;
      }else{
        break;
      }
    }
  }
  printf("%d\n",n);
  return 0;
}

12. 输入两个正整数m和n,求其最大公约数和最小公倍数。

#include "stdio.h"
int main(){
  int n,m,temp;
  int p,r;

  printf("please input tow number\n");
  scanf("%d,%d", &n,&m);

  // 把大数放在n中,把小数放在m中.
  if(n<m){
    temp = n;
    n = m;
    m = temp;
  };

  p=n*m;

  // 欧几里德算法
  // 100 模 60 余 40
  // 60 模 40 余 20
  // 40 模 20 余0
  // 20 即为最大公约数
  while (m!=0){
    r = n%m;
    n = m;     
    m = r; 
  };

  printf("最大公约数是%d\n",n);
  // 两数乘积除以最大公约数即为最小公倍数
  printf("最小公倍数是%d\n",p/n);

  return 0;
}

13. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

分析:利用while语句,条件为输入的字符不为'\n'。

#include "stdio.h"
int main(){
  char c;
  int letters=0,space=0,digit=0,others=0;
  printf("please input some words:\n");
  while ((c=getchar())!='\n'){
    // 字符
    if(c>='a'&&c<='z'|| c>='A'&& c<='Z'){
      letters++;
    // 空格
    }else if(c==32){
      space++;
    // 数字
    }else if(c>='0' && c<='9'){
      digit++;
    // 其它
    }else{
      others++;
    }
  };
  printf("char=%d space=%d,digit=%d,others=%d",letters,space,digit,others);
  return 0;
}

14. a+aa+aaa+aaaa+a...a的值,其中a是一个数字,几个数相加由键盘来控制。

#include "stdio.h"
int main(){
  int a,n,count=1;
  long int sn=0,tn=0;
  printf("please input a and n\n");
  scanf("%d,%d",&a,&n);
  printf("a=%d,n=%d",a,n);

  // n 为位数
  while (count<=n){
    tn = tn+a;   // 0+2,2+20,22+200
    a = a*10;    // 2*10,20*10,200*10
    sn = sn+tn;  // 0+2,2+22,2+22+222
    ++count;
  };
  printf("result is %ld\n",sn);
  return 0;
}

15. 一个数恰好等于它的因子之和,这个数就是一个“完数”。例如6=1+2+3,编程求出1000以内的所有完数。

#include "stdio.h"
int main(){
  int m,i,s;
  for(m=1;m<=10000;m++){
    s=0;
    // 求出该数的因子之和
    for(i=1;i<m;i++){
      if(m%i==0){
        s=s+i;
      }
    };
    // 因子数等于当前数
    if(s==m){
      printf("%d\n",m);
    }
  }
  return 0;
}

16. 一球从100米高度自由落下,每次落地反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高。

#include "stdio.h"

int main(){
  float total = 100.0, harf = total / 2;
  for (int n = 2; n <= 10; n++){
    total = total + 2 * harf;
    harf = harf / 2;
  };
  printf("第10次落地时共经过米数为%f\n",total);
  printf("第10次反弹高度为%f\n",harf);
  return 0;
}

17. 猴子吃桃问题:猴子第一天吃下若干个桃子,当即吃下一半,还不过瘾,又多吃了一个,第二天又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半零一个,到第10天想早上再吃时,只剩下一个桃子了。求第一天一共摘了多少个桃子?

#include "stdio.h"

int main(){
  int day,x1,x2;
  // 第9天吃完只剩一个桃了
  day=9;x2=1;
  while (day>0){
    // 第一天的桃子数是第二天的桃子数加1的2倍
    x1=(x2+1)*2;
    x2=x1;
    day--;
  };
  printf("第10天一共摘了%d",x2);
  return 0;
}

18. 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,已队为x,y,z三人,由抽签决定比赛。有人向队员打听比赛的的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。


#include "stdio.h"
int main(){
  // 假设i是a的对手,j是b的对手,k是c的对手
  char i,j,k;
  for(i='x';i<='z';i++){
    for(j='x';j<='z';j++){
      for(k='x';k<='z';k++){
        // 自己的队友不会比
        if(i!=j && i!=k && j!=k){
          // a不和x比,c不和x,z比
          if(i!='x' && k!='x' && k!='z'){
            printf("a--%c\tb--%c\tc--%c\n",i,j,k);
            // a--z b--x c--y
          }
        }
      }
      
    }
  }
  return 0;
}

19. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之知。

#include "stdio.h"
int main(){
  int n,t,number = 20;
  float a =2,b=1,s=0;
  for(n=1;n<=number;n++){
    s=s+a/b;
    t=a;a=a+b;b=t;
  };
  printf("这些序列数之和为%9.6f\n",s);
  return 0;
}

20. 求1+2!+3!+4!+...+20!的和。

#include "stdio.h"
int main(){
  float n,s=0,t=1;
  for(n=1;n<20;n++){
    t*=n;
    s+=t;
    printf("%f\n",t);
  }
  printf("%f\n",s);
  return 0;
}

21. 利用递归法求5!。

#include "stdio.h"
int fact(int n){
  if(n==0){
    return 1;
  };
  return n*fact(n-1);
}
int main(){
  int result = fact(5);
  printf("%d\n",result);
  return 0;
}

22. 利用递归函数的调用方式,将所输入的5个字符,以相反的顺序打印出来。

#include "stdio.h"
void reversal(int n){
  char next= getchar();
  if(n<=1){
    printf("输入完毕\n");
  }else{
    reversal(n-1);
  };
  putchar(next);

}
int main(){
  // 递归调用,由内向外释放
  reversal(5);
  printf("\n逆置完毕\n");
  return 0;
}

23. 有5个人坐在一起,第5个人比第4个人大2岁,第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人又比第1个人大2岁,第1个人为10岁,请问第5个人多少岁?

分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需要知道第4个人的岁数,依次类推,推到第一个人,再回推。

#include "stdio.h"

int getAge(int n){
  int c;
  if(n==1){
    c=10;
  }else{
    c=getAge(n-1)+2;
  };
  return c;
}

int main(){
  int age = getAge(5);
  printf("%d\n",age);
  return 0;
}

 24. 输入一个不多于5位数的正整数,求出它是几位数并逆序打印出各位数字。

#include "stdio.h"

int main(){
  long a,b,c,d,e,x;
  scanf("%ld",&x);
  a = x/10000;      // 分解出万位
  b = x%10000/1000; // 分解出千位
  c = x%1000/100;   // 分解出百位
  d = x%100/10;     // 分解出十位
  e = x%10;         // 分解出个位
 
  if(a!=0){
    printf("there are 5 number:%ld,%ld,%ld,%ld,%ld\n",e,d,c,b,a);
  }else if(b!=0){
    printf("there are 4 number:%ld,%ld,%ld,%ld\n",e,d,c,b);
  }else if(c!=0){
    printf("there are 3 number:%ld,%ld,%ld\n",e,d,c);
  }else if(d!=0){
    printf("there are 2 number:%ld,%ld\n",e,d);
  }else if(e!=0){
    printf("there are 1 number:%ld\n",e);
  };
  return 0;
}

25. 一个5位数,判断它是不是回文数。即12321是一个回文数,个位与万位相同,十位与千位相同。

#include "stdio.h"
int main(){
  long a,b,c,d,e,x;
  scanf("%ld",&x);

  a = x/10000;      // 分解出万位
  b = x%10000/1000; // 分解出千位
  c = x%1000/100;   // 分解出百位
  d = x%100/10;     // 分解出十位
  e = x%10;         // 分解出个位

  if(a==e && b==d){
    printf("这是一个回文数\n");
  }else{
    printf("这不是一个回文数\n");
  };
  return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40629244/article/details/120847834

智能推荐

Numpy常用random随机函数_numpy random-程序员宅基地

文章浏览阅读5.8k次,点赞7次,收藏35次。只要random.seed( * ) seed里面的值一样,那随机出来的结果就一样。所以说,seed的作用是让随机结果可重现。也就是说当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数。使用同一个种子,每次生成的随机数序列都是相同的。_numpy random

旺旺老师JavaSE基础第一章(01)Java介绍-程序员宅基地

文章浏览阅读424次。视频地址:http://v.youku.com/v_show/id_XNjI3NjMzOTI4.html?f=20609548_旺旺老师javase

一天一天学 windows phone 控件 之 TextBox + PasswordBox (十六)_windows控件taxtbox password-程序员宅基地

文章浏览阅读1.8k次。先从 TextBox 控件 说起,TextBox控件是输入框,类似于html中的 标签,_windows控件taxtbox password

带有Spring Cloud Config和JHipster的Java微服务-程序员宅基地

文章浏览阅读100次。朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 如今,使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最受欢迎的组合之一。 如果需要任何证据,只需看看过去几年出现的所有类似框架:MicroProfile,Micronaut和Quar..._jhipster mvn jib

【软件安装】(十二)MATLAB R2023b完整安装教程(附安装包)_matlab2023b-程序员宅基地

文章浏览阅读6.9w次,点赞325次,收藏700次。一个愿意伫立在巨人肩膀上的农民......_matlab2023b

server启动故障:com.ibm.ws.exception.RuntimeError-程序员宅基地

文章浏览阅读1.3k次。问题描述:在做了配置变更之后,server启动不起来。还原配置,依然存在这启动故障。this is the log :[8/23/15 12:09:20:276 CST] 00000001 WsServerImpl E WSVR0009E: Error occurred during startupcom.ibm.ws.exception.RuntimeError: o..._关键点恢复期间捕捉到异常!com.ibm.ws.recoverylog.spi.internallogexception

随便推点

SitePoint播客#61:HTML5 =厨房水槽-程序员宅基地

文章浏览阅读554次。Episode 61 of The SitePoint Podcast is now available! This week your hosts are Patrick O’Keefe (@iFroggy), Stephan Segraves (@ssegraves), and Kevin Yank (@sentience). SitePoint Podcast的 第61集现已发布! 本周的...

反病毒引擎设计-程序员宅基地

文章浏览阅读775次。反病毒引擎设计创建时间:2003-10-02文章属性:转载文章提交:NJUE (admin_at_ourmm.com)本文将对当今先进的病毒/反病毒技术做全面而细致的介绍,重点当然放在了反病毒上,特别是虚拟机和实时监控技术。文中首先介绍几种当今较为流行的病毒技术,包括获取系统核心态特权级,驻留,截获系统操作,变形和加密等。然后分五节详细讨论虚拟机技术:第一节简单介绍一下虚拟

此blog停止更新,请访问最新域名_域名访问升级紧急中拿笔记好-程序员宅基地

文章浏览阅读1w次。此blog停止更新,请访问最新域名 http://blog.lokizone.com_域名访问升级紧急中拿笔记好

角色控制器 (Character Controller)_charactercontroller-程序员宅基地

文章浏览阅读1.1w次,点赞8次,收藏23次。角色控制器 (Character Controller)一、简介角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制。如果要创建类人角色,可使用角色控制器 (Character Controller)。这可以是第三人称游戏 (Third Person Platformer) 中的主角色、FPS 射击者或任何敌人角色。二、基本概念第三人称游戏中的这..._charactercontroller

SpringBean生命周期详解-程序员宅基地

文章浏览阅读9.2k次,点赞14次,收藏103次。SpringBean生命周期详解一、简述:Spring是我们每天都在使用的框架,Bean是被Spring管理的Java对象,是Spring框架最重要的部分之一,那么让我们一起了解一下Spring中Bean的生命周期是怎样的吧二、流程图我们先从宏观的角度看一下Spring的生命周期:![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028174058916.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5_springbean生命周期详解

TWaver GIS制作穹顶之下的雾霾地图-程序员宅基地

文章浏览阅读210次。“我不满意,我不想等待,我也不再推诿,我要站出来做一点什么。我要做的事,就在此时,就在此刻,就在此地,就在此生”。自离职央视后,沉寂许久的知名记者、主持人柴静昨日携个人视频新作 《穹顶之下》宣告归来,并在短时间内引起广泛关注。生活在这个地球上,空气质量的好坏决定这我们的健康,每个人都希望能够呼吸新鲜空气,都希望抬起头看到的是蓝天和白云,而不是灰蒙蒙的雾霾。说到雾霾,我们用TWaver GIS实现..._twaver.controls.borderpane

推荐文章

热门文章

相关标签