当前位置: 首页 > news >正文

C语言老题新解第1-5题

文章目录

    • 1 互不相同且无重复数字
    • 2 企业利润提成
    • 3 两个完全平方数
    • 4 判断一年的第几天
    • 5 三个整数比较大小

1 互不相同且无重复数字

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

最简单当然是三重循环嵌套在一起就完事儿了,但我患有重度循环恐惧症,看到三个for叠在一起容易吓尿裤子,所以换种递归的写法,尽管看上去不太划算,但如果把问题变成1234567组成不重复的6位数字,可能效果就会显现出来。

#include<stdio.h>
int hasSameNum(int i, int j){while(i>0){if(i%10==j)return 1;i /= 10;}return 0;
}int getNum(int i, int iMax, int jMax){if(i>iMax){printf("%d\n", i);return 1;}int N=0;for(int j=1; j<=jMax; j++){if(hasSameNum(i,j))continue;N += getNum(i*10+j, iMax, jMax);}return N;
}int main()
{int N = getNum(0, 100, 4);printf("总共%d个数\n", N);
}

运行结果为

>gcc test.c
>a.exe
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
总共24个数

2 企业利润提成

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,求应发放奖金总数?

#include<stdio.h>
int main()
{int i;scanf("%d",&i);double bonus = 0;int level[6] = {0, 10, 20, 40, 60, 100};double rate[6] = {0.1, 0.075, 0.05, 0.03, 0.015, 0.01};for(int j=0; j<6; j++){if(i < level[j+1]){bonus += rate[j]*(i-level[j]);break;}bonus += rate[j]*level[j+1];}printf("奖金=%f万",bonus);
}

3 两个完全平方数

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

:即x+100=a2;x+268=b2→b2−a2=168x+100=a^2;\quad x+268=b^2\to b^2-a^2=168x+100=a2;x+268=b2b2a2=168

b=a+Nb=a+Nb=a+N,则b2−a2=(a+N)2−a2=N2+2a=168b^2-a^2=(a+N)^2-a^2=N^2+2a=168b2a2=(a+N)2a2=N2+2a=168

由于N,aN,aN,a都为正整数,故有N2<168;2a<168N^2<168; 2a<168N2<168;2a<168,即a<74,N<13a<74, N<13a<74,N<13

#include<stdio.h>
#include<math.h>
int main()
{int a, b, x;for(a=0; a<74; a++)for(b=a; b<a+13; b++){if(b*b-a*a!=168)continue;x = a*a-100;if(x>0){printf("x=%d\n", a*a-100);printf("%d+100=%d^2\n", x, a);printf("%d+268=%d^2\n", x, b);return 0; //如果觉得有多组解,可以不在这里return}}printf("本问题无解");return 0;
}

结果为

>a.exe
x=21
21+100=11^2
21+268=17^2

4 判断一年的第几天

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

以a月b日来说,作为一年中的第几天而言,可分解为a月之前的天数+b。

365/12≈30.42365/12\approx30.42365/1230.42,即平均每个月为30.42天,但由于每个月天数并不统一,所以在计算之后,对于个别月份还要增减。

对于非闰年而言,记等iii个月份之前的最后一天对应每年的第nnn天,则i,ni,ni,n的对应关系为

i23456789101112
n315990120151181212243273304334
30.42(i−1)30.42(i-1)30.42(i1)306091121152182212243273304334

发现1月需要+1;2,3,4,5,6月需要-1

1.程序分析:以3 月5 日为例,应该先把前两个月的加起来,
然后再加上5 天即本年的第几天,特殊
情况,闰年且输入月份大于3 时需考虑多加一天。
2.程序源代码:

#include<stdio.h>
int main()
{int day,month,year,sum,leap;scanf("%d %d %d",&year,&month,&day);sum = (month-1)*30.5;switch(month){case 1: sum=0; break;case 2: sum=31; break;case 3: case 4: case 5: case 6: case 7:sum = (month-1)*30.42+1;break;case 8: case 9: case 10: case 11: case 12:sum = (month-1)*30.42;break;default:printf("输入有误");break;}sum=sum+day;//闰年判定int isLeap = year%400==0||(year%4==0&&year%100!=0);if(leap==1&&month>2)sum++;printf("您输入了%d年的第%d天",year,sum);return 0;
}

结果为

>a.exe
2022 12 1
您输入了2022年的第335

5 三个整数比较大小

5 输入三个整数x,y,z,请把这三个数由小到大输出。

无非是比大小,但我有多余变量恐惧症,写习惯了a,b=b,a,非得让我新建个中间变量那不得难受死,所以下面用异或交换法。

#include<stdio.h>
int main()
{int x,y,z;scanf("%d%d%d",&x,&y,&z);if (x > y){x=x^y; y=y^x; x=x^y;} /*交换x,y 的值*/if(x > z){x=x^z; z=z^x; x=x^z;}/*交换x,z 的值*/if(y > z){y=y^z; z=z^y; y=y^z;}/*交换z,y 的值*/printf("%d<%d<%d\n",x,y,z);
} 

效果如下

>gcc test5.c
>a.exe
2 5 3
2<3<5
http://www.lryc.cn/news/30642.html

相关文章:

  • 【数据库系列】MQSQL历史数据分区
  • MyBatis常用的俩种分页方式
  • RPC通信原理解析
  • 【蓝桥杯集训·周赛】AcWing 第93场周赛
  • 蓝桥杯-刷题统计
  • Linux入门教程||Linux Shell 变量|| Shell 传递参数
  • [算法和数据结构]--回溯算法之DFS初识
  • 【LeetCode每日一题】——680.验证回文串 II
  • 【C语言进阶:指针的进阶】你真分得清sizeof和strlen?
  • 【前端必看】极大提高开发效率的网页 JS 调试技巧
  • 【春招面经】视源股份前端一面
  • 插件化开发入门
  • tftp、nfs 服务器环境搭建
  • 汇编系列03-不借助操作系统输出Hello World
  • TPU编程竞赛系列|算能赛道冠军SO-FAST团队获第十届CCF BDCI总决赛特等奖!
  • 【C++】AVL树,平衡二叉树详细解析
  • C/C++开发,无可避免的多线程(篇四).线程与函数的奇妙碰撞
  • elisp简单实例: taglist
  • Azure AI基础到实战(C#2022)-认知服务(3)
  • aws apigateway 使用restapi集成lambda
  • HTML基础
  • ThreadPoolExecutor参数 keepAliveTime allowCoreThreadTimeOut
  • 什么是Hibernate框架?
  • 指针面试笔试题练习
  • docker(三)仓库的搭建、官方私有仓库的加密和认证
  • FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持
  • Android 基础知识4-3.5 RadioButton(单选按钮)Checkbox(复选框)详解
  • 用代码实现解析解的方式求解_梯度下降法思路_导函数有什么用_接23节---人工智能工作笔记0026
  • 大数据ETL开发之图解Kettle工具
  • docker-容器数据卷