一、进制转换
问题描述
编写一个函数,输入一个十进制的数,输出相应的二进制数,八进制数和十六进制数。
#include <iostream>
#include <vector>
using namespace std;
// 这种做法仅适合转换成10进制以下的程序
void work(int n, int i)
{
vector<int> res;
while (n)
{
res.push_back(n % i);
n /= i;
}
for (int i = res.size() - 1; i >= 0; i --)
printf("%d", res[i]);
puts("");
}
int main()
{
int n;
cin >> n;
printf("%d对应的%d进制数为:", n, 2);
work(n, 2);
printf("%d对应的%d进制数为:", n, 8);
work(n, 8);
printf("%d对应的%d进制数为:", n, 16);
work(n, 16);
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void work(int n, int i)
{
string res;
while (n)
{
// a的ASCII值为97, 0的ASCII值为48
res.push_back(n % i >= 10 ? (char)(87 + n % i) : (char)(48 + n % i));
n /= i;
}
for (int i = res.size() - 1; i >= 0; i --)
cout << res[i];
cout << endl;
}
int main()
{
int n;
cin >> n;
printf("%d对应的%d进制数为:", n, 2);
work(n, 2);
printf("%d对应的%d进制数为:", n, 8);
work(n, 8);
printf("%d对应的%d进制数为:", n, 16);
work(n, 16);
return 0;
}
二、回文串
问题描述
编写一个函数,输入一串字符,以回车结束,判断该字符是否是回文串,如”abcddcba“是回文串,即正读反读相同的串。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
bool is_palindrome(string s)
{
for (int i = 0, j = s.size() - 1; i < j; i ++, j --)
if (s[i] != s[j]) return false;
return true;
}
int main()
{
string s;
while (cin >> s)
cout << is_palindrome(s) << endl;
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 递归版本
bool is_palindrome(string s, int i, int j)
{
if (i >= j) return true;
return s[i] == s[j] && is_palindrome(s, i + 1, j - 1);
}
int main()
{
string s;
while (cin >> s)
cout << is_palindrome(s, 0, s.size() - 1) << endl;
return 0;
}
三、图书管理系统
题目描述
某出版社需要统计目前最畅销的30本书的售书情况。设:每一本书需保存的信息有:书名,库存量,单价,出书统计数;从键盘每次输入一本书的书名(假设购买该出版社的读者有100人);程序根据输入的书名,使该书的库存量减少一本,售书统计数增加1;按售书统计数的多少从大到小排序输出书名,售书统计数,库存量。
要求:
(1)设计出该程序的数据结构;
(2)编写程序,实现上述所有要求。
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 3; // 统计30本书的销售情况,这里为了方便输入定义为3
const int M = 5; // 购买该出版社的读者有100人,这里为了方便输入定义为5
struct Book
{
string name{"book_name"}; // 书名
int num{100}; // 库存
double price{50}; // 价格
int sale{0}; // 销量
bool operator< (const Book& t) const
{
return sale > t.sale;
}
}book[N];
void quick_sort(int l, int r)
{
if (l >= r) return ;
int i = l - 1, j = r + 1, x = book[l + r >> 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, j);
quick_sort(j + 1, r);
}
int main()
{
puts("请输入书籍信息:");
for (int i = 0; i < N; i ++)
{
printf("请依次输入第%d本书的书名,库存量,单价:\n", i + 1);
cin >> book[i].name >> book[i].num >> book[i].price;
}
puts("请依次输入要销售的书的书名:");
for (int i = 0; i < M; i ++)
{
printf("第%d本书的书名:", i + 1);
string s;
cin >> s;
for (Book &b : book)
{
if (s == b.name)
{
b.sale ++;
b.num --;
puts("出库成功!");
break;
}
}
}
// sort(book, book + N);
quick_sort(0, N - 1);
for (int i = 0; i < N; i ++)
printf("书名:%s 库存:%d 单价:%lf 销量:%d\n", book[i].name.c_str(), book[i].num, book[i].price, book[i].sale);
// 为了与C兼容,在C中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成C中的字符串样式。
return 0;
}
/**
* 输入示例:
* 高数18讲 20 38.8
* 张宇1000题 30 28.8
* 基础30讲 40 88.8
*/
/**
* 输出:
请输入书籍信息:
请依次输入第1本书的书名,库存量,单价:
高数18讲 20 38.8
请依次输入第2本书的书名,库存量,单价:
张宇1000题 30 28.8
请依次输入第3本书的书名,库存量,单价:
基础30讲 40 88.8
请依次输入要销售的书的书名:
第1本书的书名:高数18讲
出库成功!
第2本书的书名:高数18讲
出库成功!
第3本书的书名:高数18讲
出库成功!
第4本书的书名:张宇1000题
出库成功!
第5本书的书名:基础30讲
出库成功!
书名:高数18讲 库存:17 单价:38.800000 销量:3
书名:张宇1000题 库存:29 单价:28.800000 销量:1
书名:基础30讲 库存:39 单价:88.800000 销量:1
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 3; // 统计30本书的销售情况,这里为了方便输入定义为3
const int M = 5; // 购买该出版社的读者有100人,这里为了方便输入定义为5
struct Book
{
char name[20]; // 书名
int num; // 库存
double price; // 价格
int sale; // 销量
bool operator< (const Book& t) const
{
return sale > t.sale;
}
} book[N];
void quick_sort(int l, int r)
{
if (l >= r) return ;
int i = l - 1, j = r + 1, x = book[l + r >> 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, j);
quick_sort(j + 1, r);
}
int main()
{
puts("请输入书籍信息:");
for (int i = 0; i < N; i ++)
{
printf("请依次输入第%d本书的书名,库存量,单价:\n", i + 1);
scanf("%s%d%lf", book[i].name, &book[i].num, &book[i].price);
}
puts("请依次输入要销售的书的书名:");
for (int i = 0; i < M; i ++)
{
printf("第%d本书的书名:", i + 1);
char s[20];
scanf("%s", s);
for (Book &b : book)
{
if (!strcmp(s, b.name)) // s == b.name
{
b.sale ++;
b.num --;
puts("出库成功!");
break;
}
}
}
// sort(book, book + N);
quick_sort(0, N - 1);
for (auto & i : book)
printf("书名:%s 库存:%d 单价:%.2lf 销量:%d\n", i.name, i.num, i.price, i.sale);
return 0;
}
/**
* 输入示例:
* 高数18讲 20 38.8
* 张宇1000题 30 28.8
* 基础30讲 40 88.8
*/
/**
* 输出:
请输入书籍信息:
请依次输入第1本书的书名,库存量,单价:
高数18讲 20 38.8
请依次输入第2本书的书名,库存量,单价:
张宇1000题 30 28.8
请依次输入第3本书的书名,库存量,单价:
基础30讲 40 88.8
请依次输入要销售的书的书名:
第1本书的书名:高数18讲
出库成功!
第2本书的书名:高数18讲
出库成功!
第3本书的书名:高数18讲
出库成功!
第4本书的书名:张宇1000题
出库成功!
第5本书的书名:基础30讲
出库成功!
书名:高数18讲 库存:17 单价:38.80 销量:3
书名:张宇1000题 库存:29 单价:28.80 销量:1
书名:基础30讲 库存:39 单价:88.80 销量:1
*/