c刷题(四)

目录

获得月份天数

判断字母

字母大小写转换 

网购

下列程序段的输出结果

字符逆序 

 自幂数

a的前n项之和 

最小公倍数

  倒置字符串


获得月份天数

获得月份天数_牛客题霸_牛客网

这道题可以用switch case语句解,不过这道题更简单的方法是数组,关键点在于判断是否为闰年。 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<assert.h>
int year_run(int n)
{if (((n % 4 == 0) && n % 100 != 0)||(n % 400 == 0))return 1;elsereturn 0;
}
int main()
{int y = 0;int m = 0;int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; while(scanf("%d%d", &y, &m) != EOF)//多组输入{assert(m>0&&m<13);//断言int day = days[m];if(year_run(y) && m==2)day++;printf("%d\n",day);}return 0;
}

 判断闰年和2月可以合并成一条语句用&&操作符连结,将数组下标0设置成0与月份对应,也可以添加断言是程序更加健壮。

判断字母

判断是不是字母_牛客题霸_牛客网

在用getchar或scanf读取字母的时候,我们的回车键(\n)会被保存下来,导致输出错误结果。所以这道题的关键是清理\n

#include <stdio.h>int main ()
{int ch=0;while(scanf("%c\n",&ch)!=EOF)
//while(ch = getchar() !=EOF)//读取失败返回-1{if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')){printf("%c is an alphabet.\n",ch);}else{printf("%c is not an alphabet.\n",ch);}//getchar();}
return  0;
}

字母大小写转换 

 字母大小写转换_牛客题霸_牛客网

利用ascii码的一一映射关系解决,也可以使用c语言的库函数——toupper(转大写)tolower(转小写)来转化。

#include <stdio.h>int main() {char ch;while (scanf("%c", &ch) != EOF) { //加\n会使结果错位if (ch <= 'z' && ch >= 'a')printf("%c\n", ch - 32);if (ch <= 'Z' && ch >= 'A')//其他字符忽略掉了题目没做要求printf("%c\n", ch + 32);//不排除其他字符getchar();//去\n}return 0;
}
//库函数
#include<ctype.h>
#include <stdio.h>int main()
{int ch = 0;while((ch=getchar()) != EOF){if(islower(ch))//判断小写函数{printf("%c\n", toupper(ch));}else{printf("%c\n", tolower(ch)); }getchar();}return 0;
}

别忘了清理缓冲区!

网购

网购_牛客题霸_牛客网

并不难,主要是想分享用0和1表示优惠券这个妙处,省去了多余的判断。

#include <stdio.h>int main() {double p;int m, n,discount;scanf("%lf %d %d %d", &p, &m, &n, &discount);if (m == 11 && n == 11){p = p * 0.7 - discount * 50;}else if(m == 12 && n == 12)p = p * 0.8 - discount * 50;if (p < 0)p = 0;printf("%.2lf", p);return 0;
}

下列程序段的输出结果

unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr = pulArray;
*(pulPtr + 3) += 3;
printf("%d,%d\n",*pulPtr, *(pulPtr + 3));

访问第4个元素的地址并解引用对值+3然后赋值给第四个pulArray[3]这个变量,可以理解为pulArray[0+3] = pulArray[0+3]+3。打印结果为6,12

字符逆序 

字符逆序__牛客网

这道题用scanf输入数据显然是不合理的,我们可以用gets函数输入一行字符串,结束标志为\n,然后记录数组首尾指针进行交换(不包括\0)。 

#include <stdio.h>
#include<string.h>
int main() {char arr[10001] = {0};gets(arr);int num = strlen(arr)-1;//下标char* left = arr;char* right = arr+num;while(left<right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}puts(arr);//输出return 0;
}

 自幂数

求出0~100000之间的所有“水仙花数”并输出。

要点:灵活运用pow函数求次方并记录每一位数求相应位数的次方数。

int water(int c,int num)//递归 
{if (c < 10){return (int)pow(c, num);}int n = water(c / 10,num);return (int)pow(c % 10, num) + n;
}int count_num(int i)
{int num = 0;if (i < 10){return ++num;}return 1 + count_num(i / 10);//记录次数
}
int main()
{int i = 0;for (i = 0; i < 100000; i++){//计算位数if (i == water(i,count_num(i)))printf("%d ", i);}return 0;
}

a的前n项之和 

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222

 找规律:前面的数乘以10+a为后面的一项。那第一项就是0*10+a。

int main()
{int a = 0;int n = 0;int i = 0;int sum = 0;int tmp = 0;scanf("%d%d", &a, &n);for(i=0; i<n; i++){tmp = tmp*10+a;sum += tmp;}printf("%d\n", sum);return 0;
}

最小公倍数

方法一:选两个数较大值记为x,不断++直到x能整除二者。

方法二:辗转相除法求最大公倍数(k)然后利用公式 m*n/k 

方法三:选两个数较小值按倍数递增去试除二者,直至都能被整除。

前面两个方法之前已经实现过了,我们来看第三个方法:

	int m, n;int i = 1;while (scanf("%d %d", &m, &n) == 2){if (m > n){int tmp = m;m = n;n = tmp;}for (i = 1; m * i % n != 0; i++){;}printf("%d\n", m * i);}

提示:如果数据过大可以将int改为long类型

  倒置字符串

倒置字符串__牛客网

思路:单词倒置+整体倒置(可以改变顺序),每个单词倒置同样需要记录首尾指针,尾为空格-1,整体结束条件为\0注意最后一个单词的结束条件也为\0.

#include <stdio.h>
#include <string.h>
#include <assert.h>
void reverse(char* left,char* right)
{assert(left && right);//断言while(left<right){int tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
int main() {char arr[101] = {0};gets(arr);char* cur = arr;//记录指针while(*cur){char*start = cur,*end = cur;//单词首尾指针while(*end != ' ' && *end != '\0'){end++;}reverse(start,end-1);if(*end)cur = end + 1;elsecur = end;}int len = strlen(arr)-1;reverse(arr,arr+len);//整体逆置printf("%s\n",arr);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134520.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AE-如何制作湖面水波纹波动的效果

目录 1.新建水面合成 2.新建纯色层命名为“分形杂色”&#xff0c;并添加“分形杂色”效果&#xff0c;设置相关参数 3.添加3D效果&#xff0c;并添加摄像机和空对象 4.新建中秋节合成&#xff0c;导入背景图&#xff0c;新建调整图层&#xff0c;并在调整图层上增加“焦散…

【C++】动态内存管理(79分钟写的文章哪里看不懂了,快来学)

动态内存管理目录&#xff1a; 一、C/C内存分布 在学习了C/C内存区域的划分后&#xff0c;我们来做几道题巩固一下&#xff1a; 1. 选择题&#xff1a;选项 : A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)globalVar在哪里&#xff1f;____ staticGlobalVar在哪里&#x…

一个Binder的前生今世 (一):Service的创建

一个Binder的前生今世 (一):Service的创建 一个Binder的前生今世Binder的历史 (字面意义的前生今世)Binder的生命周期(抽象意义的前生今世)Binder 应用及系统层关系图Binder应用层的架构设计Binder应用层实现Binder的创建服务端Binder的创建服务端Binder的传递Binder在客…

实现按钮悬停动画

知识点与技巧 伪元素 使用伪元素来作为按钮悬停效果动画展示的元素 z-index 的使用技巧 使用z-index属性来控制按钮和伪元素的层次关系 transform、transition 复习 使用transform、transition两个属性来实现动画的展示 按钮边框动画 切换效果 核心代码 .btn.btn-border-…

2023面试知识点一

1、新生代和老年代的比例 默认的&#xff0c;新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )&#xff0c;即&#xff1a;新生代 ( Young ) 1/3 的堆空间大小。老年代 ( Old ) 2/3 的堆空间大小。其中&#xff0c;新生代 ( …

Unity减少发布打包文件的体积——获取精灵图片的信息限制它的大小

一、起因 一个工程&#xff0c;打包成webGL且压缩成zip文件后&#xff0c;接近400M&#xff0c;后来把大的精灵图片设置最大尺寸&#xff0c;降低大小后&#xff0c;再次发布&#xff0c;zip文件缩减到250M 二、如何一键获得工程里面的精灵图片信息 三、获取精灵图片信息 1、…

esp32-S3-electric-vehicle-expansion(EVE_V2)硬件分享

一. 简介 本次将给大家分享一个QSPI圆形屏幕DIY的小项目&#xff0c;这是我做的第二个版本的&#xff0c;相较于第一个版本有了比较大的改动(第一版就不放出来了&#xff0c;需要的可以私聊)&#xff0c;可以在上面实现更多的功能&#xff0c;做些更有趣的项目 &#xff0c;也…

[libc-2.31 off_by_null] N0wayBack ezheap练习

以前保留了个WP&#xff0c;但是没复现过也没法用&#xff0c;用了两个晚上慢慢理复现一下。 先看这个题 while ( 1 ){menu();__isoc99_scanf("%d", &v3);switch ( v3 ){case 1:m1add(); //带readbreak;case 2:m2free();break;case 3:m3edit(); //溢出br…

视频监控系统/安防监控/视频AI智能分析:小动物识别算法场景汇总

随着人们对生态环境的关注日益提升&#xff0c;大家对动物保护意识也逐渐增强。旭帆科技智能分析网关小动物识别算法应运而生。除了对保护动物的识别以外&#xff0c;旭帆科技AI智能分析网关还可以识别常见的老鼠等动物&#xff0c;助力明厨亮灶监管&#xff0c;保卫食品安全。…

uniapp风险等级(三级)

代码 ​ <template><view><view class"riskGrade"><label>风险等级: </label><span v-if"flag 0 || flag 1 || 2" class"item":style"[{background:flag0?color:flag1?color:flag2?color:}]"…

Redis 事务 - 监控测试

Redis 基本事务操作 Redis事务本质&#xff1a;一组命令的集合&#xff01;一个事务中的所有命令都会被序列化&#xff0c;在事务执行过程的中&#xff0c;会按照顺序执行&#xff01; Redis事务是一组Redis命令的有序集合&#xff0c;这些命令在事务中按照顺序执行&#xff0…

voliate实战:voliate可见性验证有序性非原子性验证

一、可见性验证 下面的程序验证了voliate的可见性。 public class VolatileVisibilityTest {private static volatile boolean inintFlag false;public static void main(String[] args) throws InterruptedException {new Thread(() -> {System.out.println("waiti…

期权投资的优势有哪些方面?

随着金融市场的不断演变&#xff0c;越来越多的金融衍生品出现在人们的视线中&#xff0c;特别是上证50ETF期权可以做空T0的交易模式吸引了越来越多的朋友&#xff0c;那么期权投资的优势有哪些方面&#xff1f; 期权是投资市场中一个非常重要的投资方式&#xff0c;期权投资能…

LeetCode:两数之和

题目描述&#xff1a; 这是一道用暴力解法&#xff0c;逻辑十分简单、清晰的一道题&#xff0c;直接遍历数target-num[i]就行 而官方给了第二种巧妙的解法&#xff1a;运用哈希表。此法可将时间复杂度从O&#xff08;N^2&#xff09;降到O&#xff08;1&#xff09; 其思路是…

日志技术-Logback

日志技术 将系统执行的信息&#xff0c;方便的记录到指定位置&#xff08;控制台、文件、数据库&#xff09;可以随时以开关的形式开关日志&#xff0c;无需入侵到源代码去修改 日志接口&#xff1a;设计日志框架的统一标准 注&#xff1a;有人对JCL接口不满意&#xff0c;就…

基于Questasim的SystemVerilog DPI使用流程

1. 前言 DPI是Direct Programming Interface的缩写&#xff0c;它提供了SystemVerilog与其它编程语言(特别是C语言)交互的接口。它允许编程人员轻松地从SystemVerilog调用C函数&#xff0c;且在C函数也可以调用Systemverilog的函数。 DPI极大地方便了使用现有的C代码&#xf…

深度学习-全连接神经网络-激活函数- [北邮鲁鹏]

文章目录 基础知识为什么需要非线性操作&#xff08;激活函数&#xff09;&#xff1f;激活函数 vs 数据预处理常用的激活函数Sigmoid函数 &#xff08;Logistic函数&#xff09;双曲正切函数&#xff08;Tanh函数&#xff09;线性整流函数&#xff08;ReLU函数&#xff09;Lea…

C【数组】

1.一维数组 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 int main() { // char arr[] "abcdef";//[a][b][c][d][e][f][\0] // //printf("%c\n", arr[3]);//d // int i 0; // int len strlen(arr); // for(i0; i<len; i) // { // p…

机器学习笔记之最优化理论与方法(十)无约束优化问题——共轭梯度法背景介绍

机器学习笔记之最优化理论与方法——共轭梯度法背景介绍 引言背景&#xff1a;共轭梯度法线性共轭梯度法共轭方向共轭VS正交共轭方向法共轭方向法的几何解释 引言 本节将介绍共轭梯度法&#xff0c;并重点介绍共轭方向法的逻辑与几何意义。 背景&#xff1a;共轭梯度法 关于…

Ubuntu 22.04LTS + 深度学习环境安装全流程

一、 CUDA Toolkit 安装 1. 选择需要安装的版本(下载地址) 2. 选择自己的系统版本获取下载地址和安装指令 3. 运行安装指令进行安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.…