- 博客(26)
- 收藏
- 关注
原创 C++作业
要求:编写一个字符删除函数 char *remove(char *str, char *chars),用 new 分配新的字符数组(大小为 str 的长度 +1),将 chars 中包含的字符从 str 中删除后存入该字符数组,并返回该字符数组。在这道题中我们使用了动态内存的分配,实际上可以不用两个动态内存分配,只需要记录下newstr的长度,并在输出时采用循环来输出数据。值得一提的是,new出来的newstr是一个指针,*newstr指的是指针指向的当前字符。输出:epihg9pkp。
2024-03-11 22:08:50 495
原创 oj约瑟夫问题(报数问题)
有n个人围成一圈,顺序从1开始排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。建议用循环链表实现。只有一个正整数n,(其中n的范围n>=3,n<=1000)。输出最后留下的人是原来的第几号。请注意行尾输出换行。
2023-12-25 20:53:44 587
原创 oj 算法提高 6-9删除数组中的0元素
编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。然而,这样的写法有一个问题,就是如果有连续的0,i依旧会增加,从而错过了连续的下一个0,要修改这个算法,我们可以通过控制i++的条件来实现。这样删除了0之后,就可以判断原本i的位置是不是还是0了。第二行n个数,表示输入数组的元素,数之间以空格分隔。将调用此函数后得到的数组和函数返回值输出。
2023-12-06 21:10:04 94
原创 oj算法训练 数组查找及替换
给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。元素个数不超过100,b在1至100之间。这里我们使用一个循环来寻找被b整除的值,n是不断变化的,所以不用担心范围问题。我们如何在删除的同时也使n这个变量做出变化呢?指针可以修改这个值本身,跳出函数后也依旧可以继续使用。3.如果元素在A到Z间,替换为字符。第一行为数组元素个数和整数b。该数组各元素按从小到大排序。1.删除被b整除的元素。
2023-12-06 20:03:39 83
原创 231117
若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,且A与B不相等,则称A和B为一对亲密数对。每一个亲密数对(A,B)占一行,两个数用空格分隔,且A < B。然后想着优化一下,不用那么多for循环,解决方案就是把每个数的fri数记为num,继续遍历数,找到与fri数相等的数,然后输出这个数i和num。然后再写遍历,出现了一个问题,第一次写的时候用了嵌套的for循环,导致计算量巨大计算机完不成计算。问题又出现了,就是会有重复的数,解决方案就是把该num存为a,让i不等于a时再输出。
2023-11-17 21:55:50 183
原创 231117 oj反置数
一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如说,1245的反置数是5421,而1200的反置数是21。请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来。要求:由于在本题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式。输入格式:输入只有一行,包括两个整数,中间用空格隔开。输出格式:输出只有一行,即相应的结果。
2023-11-17 20:46:50 73
原创 判断质数函数
1以下的都不是质数,所以先写了个if小于1时不是质数。还有就是i要小于等于sqrt(number)如果是质数就会输出1,不是质数就会输出0。
2023-11-13 20:40:05 41
原创 231108 oj二维数组操作
将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组;数组按n行n列的方式输出。在每行最后一个元素输出换行。输入一个整数n,定义一个二维整型数组(n×n),初始化该数组,将数组中最大元素所在的行和最小元素所在的行对调。n×n数组元素的值由scanf函数从键盘输入。的值并加上 1,并不是与其他元素进行比较。用max和min存储i的值,然后再进行比较。我的代码错误的地方在于。
2023-11-08 21:12:09 139 5
原创 蓝桥杯t278 数的统计
如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1 次,5出现1次。若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现的次数。该x的范围int不能完全涉及,long太大,于是我选择用了unsigned int,运行成功。你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。第二行是n 个用空格隔开的正整数x,代表给定的序列。第一行正整数n,表示给定序列中正整数的个数。
2023-11-08 19:52:11 67 1
原创 231107
函数调用时,数组只用写他的名字 比如max(a,(数组名),n(数组大小))如果有,flag就为1,如果没有,flag就为0,从而实现最后的输出分叉。原理:将数字依次向右比较,若j+1小于j,则将a[j+1]和a[j]交换。设置一个flag,标志是否有需要输出的数。若查找失败:输出Not Found。若查找成功:输出第一次出现的下标。oj 在数组中查找指定元素。如何实现单线两种输出?i的作用只是一个标识。oj 求连续数列长度。
2023-11-07 21:23:14 85
原创 231105
计算一个字符串的长度:用strlen()(需添加头文件#include<string.h>)1.有参数列表 2.有返回值 3.有出口。第一个scanf中缓存了\n,我们需要把这个\n消除了才能继续存入。解决方法:加一个getchar()先写出口(即最后一步)
2023-11-06 22:36:16 158
原创 231101
getchar():意思是只读取一个字符,如果输入一串字符,也只会读一个,读到回车键时停止,可以通过这个功能来读入字符的数目。有两个队,应该把一个队的编号看作是固定的,然后移动另一个队的编号。例如:while((c=getchar())!如果是说需要把整个等式列出来的,需要用到数组。
2023-11-01 21:03:05 62 1
原创 231029
总之,由于下标从0开始,所以最大下标应该是实际元素个数j减1,即j-1。这样每次循环就可以输出reverse[]正确的顺序了。输入n个整数,从n个整数中找到其中的最大值并输出。这就是为什么初始化for循环下标k为j-1。第二行是n个用空格分隔的整数(可正可负)。c语言中判断不等于是!第一行是一个正整数n(n>=1)。oj十进制转化二进制。
2023-10-29 21:36:14 104 1
原创 231026
修改如下:c=(F<0)?程序优化:f>0和小于零可以改成三元运算符。保留小数:用%.nf n是需要保留的位数。oj 4.9 摄氏度和华氏度转化。
2023-10-29 21:01:14 46 1
原创 231024
然后再将r2的值赋给r1,rn的值赋给r2,相加即可得rn,以此类推即可求得每个月的兔子数。解决方法:找一个指示值,当break的时候这个指示值就会变化,通过这个指示值来输出i的值。cout必须放在循环里的原因是让他每次循环都回到0这个值,并且cout必须在外层定义。那么当i被某个j整除时,if语句判断成立,就会执行break,跳出内层for循环。关键是发现规律:前两个月兔子的数目之和等于第三个月的兔子数目。break语句的作用是终止当前循环,跳出循环。所以说,不要随便用break,他会终止整个循环。
2023-10-24 21:17:11 86
原创 231023
给每个数字标上序号,通过比较得他们的大小,其实完全可以直接通过一个一个交换做到从小到大排序(因为if运算有顺序,t可重复利用)1.本质是移动数字,将最小的放在x位上,所以只需要一点一点判断谁是最小的。1.首先要想到特殊情况,年分为闰年和平年,闰年的2月有29天。2.当闰年时候,如果输入的月份在2月份之前,那就不应该+1天。总结:有特殊时应该自己模拟一下流程,不要漏掉各种特殊情况。2.需要用到一个容器装数字,进行交换。
2023-10-23 21:49:38 42
原创 231019
1.单字符串用char 引用时是%c;双字符用string 引用时是%s。除了public还有private,就是不能在类外使用的。2.保留小数%.保留的位数,注意位数前面有.然后调用,格式为:声明.变量名称。首先给他一个名称:类型 声明。
2023-10-19 22:15:19 23
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人