Lecture (6)包含以下五道编程题,可以在上面的OJ提交。
035:Pell数列
#include <iostream>
using namespace std;
#define Mod 32767
int 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;
}