OJ地址
Lecture (6)包含以下五道编程题,可以在上面的OJ提交。
035:Pell数列
#include <iostream>
using namespace std;
#define Mod 32767int main(int argc, const char * argv[]) {
int n,k;cin>>n;while (n--) {
cin>>k;int a1=1,a2=2,res;if(k==1)cout<<a1<<endl;else if(k==2)cout<<a2<<endl;else{
for(int i=1;i<=k-2;i++){
res = 2*(a2%Mod)+(a1%Mod); //对最终结果取余 可以在运算的每一步进行取余 结果不变,而且可以防止溢出a1 = a2;a2 = res;}cout<<a2%Mod<<endl;}}return 0;
}
036:求最大公约数问题
#include <iostream>
using namespace std;int main(int argc, const char * argv[]) {
int a,b;cin>>a>>b;if(a<b) //交换a,b{
a = a^b;b = b^a;a = a^b;}int r = a%b;while(r){
a = b;b = r;r = a%b;}cout<<b<<endl;return 0;
}
037:编程填空:第i位替换
#include <iostream>
using namespace std;int bitManipulation1(int n, int m, int i) //返回结果:把n的第i位 替换为 m的第i位
{
return (~(1<<i)& n) | ((1<<i)&m);
}int main() {
int n, m, i, t;cin >> t;while (t--) {
cin >> n >> m >> i;cout << bitManipulation1(n, m, i) << endl;}return 0;
}
038:编程填空:第i位取反
#include <iostream>
using namespace std;int bitManipulation2(int n, int i) {
//返回结果:对n的第i位取反 其余位不变 异或return (1<<i)^n;
}int main() {
int t, n, i;cin >> t;while (t--) {
cin >> n >> i;cout << bitManipulation2(n, i) << endl;}return 0;
}
039:编程填空:左边i位取反
#include <iostream>
using namespace std;int bitManipulation3(int n, int i) {
//返回结果:对n的左边i位取反 其他位不变。return ((1<<31)>>(i-1))^n;
}int main() {
int t, n, i;cin >> t;while (t--) {
cin >> n >> i;cout << bitManipulation3(n, i) << endl;}return 0;
}