[PTA] 7-13 后天

一、要求

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

  • 输入格式:
    输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。
  • 输出格式:
    在一行中输出D天的后天是星期几。
  • 输入样例:

3

  • 输出样例:

5

二、代码

#include <stdio.h>

int main(void)
{
    int a,b;
    scanf("%d",&a);
    b=(a+2)%7;
    if(b==0)
    {
    	printf("7");
	}else
	printf("%d",b);
    
    return 0;
}

三、思路

  • 对输入的数字+2后对7取余就可以得到后天的星期数,需要考虑余数为0的情况,也就是7的倍数,也就是星期日,直接输入即可。

四、运行结果

在这里插入图片描述

### PTA 7-13 字符串全排列 解法与思路 #### 题目概述 题目要求给出一个字符串的所有可能的排列组合。这涉及到递归和回溯的思想,通过交换字符的位置来生成不同的排列。 #### 方法一:基于递归的方法 可以采用递归来解决问题,在每一层递归中固定当前的第一个字符,然后对剩余的部分继续求解子问题直到只剩下一个元素为止。当遇到重复字符时要跳过以避免产生相同的排列[^1]。 ```cpp #include <iostream> #include <algorithm> using namespace std; void permute(string &s, int start){ if(start == s.size()){ cout << s << endl; return ; } for(int i=start; i<s.length(); ++i){ swap(s[start], s[i]); // 固定第一个字符 permute(s, start+1); // 对剩下的部分做同样的操作 swap(s[start], s[i]); // 恢复原状以便尝试其他可能性 } } int main(){ string str; cin >> str; sort(str.begin(),str.end()); // 排序是为了方便去重 do{ permute(str, 0); } while(next_permutation(str.begin(), str.end())); // 使用STL中的next_permutation函数遍历所有排列 } ``` 这种方法利用了`std::sort()` 和 `std::next_permutation()`, 它们都是 C++ STL 中非常有用的工具。 #### 方法二:非递归方法——字典序算法 另一种常见的做法是非递归的方式即按照字典顺序依次枚举所有的排列情况。具体来说就是找到最后一个升序对并调整其后的最大降序段使之成为最小的大于前者的数列再反转后面的序列得到新的更大的排列[^2]。 ```cpp bool nextPermutation(vector<int>& nums) { int n = nums.size(); int k,l; for(k=n-2 ;k>=0 && nums[k]>=nums[k+1]; --k); if(k<0){ reverse(nums.begin(), nums.end()); return false; } for(l=n-1;l>k&&nums[l]<=nums[k];--l); swap(nums[k], nums[l]); reverse(nums.begin()+k+1, nums.end()); return true; } ``` 上述代码实现了寻找下一个更大排列的功能,适用于整型数组但是同样原理也适用字符串类型的排列计算。 #### 性能分析 两种方案的时间复杂度均为O(n!),因为对于长度为n 的输入会产生n! 种不同结果;空间消耗主要取决于调用栈深度以及额外使用的辅助变量数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hiker_Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值