提示:本文为学习记录,若有错误,私聊作者,谦虚受教。
文章目录
入门算法题
我们一定要说积极向上的话。 只要持续使用非常积极的话语,就能积累起相关的重要信息,于是在不经意之间,我们就已经行动起来,并且逐渐把说过的话变成现实。
一、反向输出四位数
#include <bits/stdc++.h>
using namespace std;
int main() {
char str[10];
scanf("%s", str);
//将数字以字符串读入,只要输出字符串后四位即可
printf("%c%c%c%c\n", str[3], str[2], str[1], str[0]);
return 0;
}
这里采取的是直接将数字以字符串的形式输入,输出字符串的后四位。
二、反转字符串
//反转字符串
class Solution {
public:
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
string solve(string str) {
// write code here
//采用开辟一个参数和str长度大小相同的字符串,把传入的str倒序赋值到新的字符串上面
string m_number=str;
int len=str.length();
for(int i=0 ; i <len;i++)
{
m_number[i]=str[len-1-i];
}
return m_number;
//原地交换,交换进行次数是len/2
string m_number=str;
int len=str.length();
for(int i=0;i<len;i++)
{
swap(m_number[i], str[len-1-i]);
}
return m_number;
//直接调用库函数
reverse(str.begin(), str.end());
return str;
}
};
这里有三种方法
(1)采用一个参数个str长度大小相同的字符串,把传入的str倒序赋值到新的字符串上面
(2)原地交换,交换进行次数是len/2。len是输入字符串的长度
(3)直接调用库函数,reverse()。
三、螺旋矩阵
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> res;
int m = matrix.size();
if(m == 0) return res;
int n = matrix[0].size();
int nRows = m;
int nCols = n;
int tmpR, tmpC;
for(;m > 0 && n > 0 && res.size() < nRows*nCols;m--,n--)
{
tmpR = nRows - m;
tmpC = nCols-n;
//从左至右
for(;tmpC < n && tmpR < m; tmpC++)
res.push_back(matrix[tmpR][tmpC]);
//从上至下
tmpC = n - 1;
tmpR = nRows - m + 1;
for(;tmpR < m && tmpC >= 0; tmpR++)
res.push_back(matrix[tmpR][tmpC]);
//从右向左
tmpR = m - 1;
tmpC = n - 2;
for(;tmpC >= (nCols - n) && tmpR > (nRows - m); tmpC--)
res.push_back(matrix[tmpR][tmpC]);
//从下至上
tmpC = nCols - n;
tmpR = m - 2;
for(;tmpR >= (nRows - m) + 1 && tmpC < (n - 1); tmpR--)
res.push_back(matrix[tmpR][tmpC]);
}
return res;
}
};
四、判断回文
回文指的是:正读和反读都是一样的字符串。
//判断回文
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param str string字符串 待判断的字符串
* @return bool布尔型
*/
bool judge(string str) {
// write code here
//回文串指的是正读和反读都一样的字符串
int len=str.length();
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-1-i])
return false;
}
return true;
}
};
实际就是判断第一个元素和最后一个元素是否相等,如果相同输出true,不相同就输出false,以此类推,第二个元素和倒数第二个元素也是如此。
五、判断两个数的大小
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
//cin >> a>>b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==b)
{
cout<<min(a,b)<<"="<<max(a,b)<<endl;
}
else if(a<b)
{
cout<<min(a,b)<<"<"<<max(a,b)<<endl;
}
else
{
cout<<max(a,b)<<">"<<min(a,b)<<endl;
}
}
return 0;
}
这里使用的是while函数,以及if判断语句,显示判断输入的值是否为0,不等于0的情况下进行比较,如果a=b就用cout输出结果。
六、判断辅音还是元音
#include<bits/stdc++.h>
using namespace std;
int main()
{ char ch=0;
while(scanf("%c",&ch)!=EOF){
if(ch=='\n')
continue;
if(ch>='a'&&ch<='z')
ch -=32;
if(ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'){
printf("Vowel\n");
}
else{
printf("Consonant\n");
}
}
}
七、缺失数字
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 找缺失数字
* @param a int整型vector 给定的数字串
* @return int整型
*/
//方法一:利用求和公式,将全部值相加减去输入的数组之和
//方法二:直接对arr[i]!=i,输出i
int solve(vector<int>& a) {
int aLen=a.size();
int presum = aLen * (aLen + 1) / 2;
int sum = 0;
for (int i=0;i<aLen;i++)
sum += a[i];
return presum - sum;
}
// }
};
这里有两种方法
(1)利用求和公式,将全部值相加后减去输入的数组之和
(2)直接arr[i]!=i ,输出i
八、十六进制+八进制之和
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a=0,b=0;
scanf("%x %o",&a,&b);//x是十六进制,o是八进制读入。
cout<<a+b<<endl;
}
这里采取的方法比较直接,%x是十六进制,%0是八进制。
九、十六进制转换十进制
#include <bits/stdc++.h>
using namespace std;
int main() {
int val = 0xABCDEF;
//setw是cpp内置的设置输出位宽的函数,cout能自动以十进制输出
cout << setw(15) << val << endl;
return 0;
}
十、puts函数输出字符串
//单纯输出Practice makes perfect!,使用puts函数输出字符串
#include<bits/stdc++.h>
using namespace std;
int main() {
const char words[] = "Practice makes perfect!";
//const关键字它限定一个变量不允许被改变,产生静态作用。
//使用const在一定程度上可以提高程序的安全性和可靠性
puts(words);
return 0;
}
总结
多点总结,多进一步。