回文串
算法思路:
利用双指针,遍历字符串,设置标志flag,初值为true。若i与j所指元素相等,则i,j分别向后向前移动,若不相等,令flag = false,退出循环。
#include<iostream>
#include<string>
using namespace std;
string s;
bool judge(){
int i = 0, j = s.size() - 1;
bool flag = true;
while(i <= j){
if(s[i] == s[j]){
i++;
j--;
}else{
flag = false;
break;
}
}
return flag;
}
int main(){
cin >> s;
if(judge()){
cout << "true";
}else{
cout << "flase";
}
return 0;
}
进制转换(10 -> 8)
算法思路:
while循环输入数字x的值,利用字符串res存储结果,res初始化为空串,每次循环将x对8取余的结果转为字符串加入res数组,然后对x做除8的操作,求下一位的值。
#include<iostream>
#include<string>
using namespace std;
int main(){
int n;
cin >> n;
while(n--){
int x;
cin >> x;
string res = "";
while(x){
res = to_string(x%8) + res;
x = x/8;
}
cout << res << endl;
// while (x)//16进制
// {
// int t = x % 16;
// if (t < 10) res = to_string(t) + res;
// else res = "ABCDEF"[t - 10] + res;
// x /= 16;
// }
}
return 0;
}
三、图书管理系统
某出版社需要统计目前最畅销的30本书的售书情况。
每一本书需保存的信息有:书名,库存量,单价,出书统计数;
从键盘每次输入一本书的书名(假设购买该出版社的读者有100人);
程序根据输入的书名,使该书的库存量减少一本,售书统计数增加1;
按售书统计数的多少从大到小排序输出书名,售书统计数,库存量。
算法思路:
首先利用结构体存储书本信息,利用快速排序,对售书数量做降序排序。
#include<include>
#include<algorithm>
using namespace std;
const int N = 30;//书本个数
const int M = 100;//读者数量
struct Book{
string name;//书名
int num;//库存量
int val;//单价
int sale;//出书统计数
bool operator < (const *Book t) const {//重载小于号,作为结构体之间的比较依据;
return sale > t.sale;//根据题目要求,出书数大的结构体小,排前面。
}
}*book[N]
void quick_sort(int l, int r){
if(r <= l) return;
int i = l - 1, j = r + 1, x = book[r + l >> 1].sale;
while(i < j){
do i++; while(book[i].sale > x);
do j--; while(book[j].sale < x);
if(i < j) swap(book[i], book[j]);
}
quick_sort(l, i);
quick_sort(i + 1, r);
}
int main(){
puts("请输入书籍信息:");
for(int i = 0; i < N; i++){
cin >> book[i].name >> book[i].num >> book[i].val >> book[i].sale;
}
puts("请输入售出书名");
for(int j = 0; j < M; j++){
string s;
cin >> s;
for(Book *b : book){
if (b.name == s){
b.num--;
b.sale++;
puts("出库成功");
break;
}
}
}
quick_sort(0,N-1);
for (int i = 0; i < N; i ++)
cout>>book[i].name>>book[i].num>>book[i].price>>book[i].sale;
return 0;
}