以下是完整的C++代码:
#include <iostream>
using namespace std;
void input(int& hours24, int& minutes) {
cout << "Enter the time in 24-hour format (HH MM): ";
cin >> hours24 >> minutes;
}
void convert(int& hours, char& AMPM) {
if (hours > 12) {
hours -= 12;
AMPM = 'P';
} else {
AMPM = 'A';
}
if (hours == 0) {
hours = 12;
}
}
void output(int hours, int minutes, char AMPM) {
cout << "The time in 12-hour format is: ";
cout << hours << ":" << minutes << " " << AMPM << ".M." << endl;
}
int main() {
int hours24, minutes;
char AMPM = ' ';
input(hours24, minutes);
convert(hours24, AMPM);
output(hours24, minutes, AMPM);
return 0;
}
首先,我们定义了三个函数:input()
、convert()
和output()
。这些函数分别用于输入时间、转换时间和输出时间。
在 input()
函数中,我们要求用户以“小时”和“分钟”为单位输入时间(24小时格式)。
在 convert()
函数中,我们将24小时格式的小时数转换为12小时格式的小时数,并设置字符变量AMPM表示是上午还是下午。
最后,在 output()
函数中,我们输出12小时格式的时间。
在主函数中,我们调用这三个函数以完成转换和输出。
出现以上问题的原因,主要是因为相同的字符进行了多次交换。举个栗子abb,a固定时,后面的字符位置不变,得到abb,当第2个b和第3个b交换时,又得到了abb,解决这个问题的思路在于,在交换时进行判断,如果后面的字符有重复就不交换。当第i个字符和第j个字符交换位置时,判断范围是[i,j)是否有和j重复的数,代码如下:
bool isSwap(char *list, int begin, int end) {
for (int i = begin; i < end; i++){
if (list[i] == list[end])
return false;
}
return true;
}
#define SWAP(x,y,t) ((t) = (x),(x) = (y),(y) = (t))
void perm(char *list, int i, int n){
int j, temp;
if (i == n) {
printf("\t%s\n", list);
}
else {
for (j = i; j <= n; j++){
if (isSwap(list, i, j)) {
//使用宏定义,传的是数值,如果这的swap用函数实现,传的应该是指针
SWAP(list[i], list[j], temp);
//交互位置后,输出以list[j]不变,后面的字母改变的所有排列
perm(list, i + 1, n);
SWAP(list[i], list[j], temp);
}
}
}
int main(){
char list[] = "abc";
perm(list, 0, strlen(list)-1);
}
答案:
解决问题方法:可以通过一定的计算和格式化字符串的操作来将24小时制的时间转化为12小时制的时间,具体可参考以下代码:
#include <iostream>
#include <string>
using namespace std;
string convertTime(int hour, int minute) {
string t = "";
if (hour > 12) {
t += to_string(hour-12) + ":" + to_string(minute) + " PM";
} else {
t += to_string(hour) + ":" + to_string(minute) + " AM";
}
return t;
}
int main() {
int hour, minute;
cout << "请输入24小时制的小时数:";
cin >> hour;
cout << "请输入分钟数:";
cin >> minute;
string t = convertTime(hour, minute);
cout << "12小时制时间为:" << t << endl;
return 0;
}
该程序中 convertTime
函数将给定的小时和分钟转化为12小时制的时间,并以字符串形式返回。程序通过 cin
获取用户输入并通过 cout
输出结果。
函数声明:string convertTime(int hour, int minute)
函数含义:将给定的小时和分钟转化为12小时制的时间,并以字符串形式返回。
变量含义:hour
表示小时数,minute
表示分钟数。
程序中自定义了一个将24小时制的时间转化为12小时制的时间的函数,并在 main
函数中调用。用户可以通过 cin
获取所需的24小时制时间(小时和分钟),并通过该函数将时间转化为12小时制的时间,并通过 cout
输出结果。
在这个问题中,我们没有用到参考资料中的任何函数。