1、(10分)求20+21+22+23+…+2n的和,n=20。
1 //刚开始想一个一个算再加一块,后来想到了求和公式 2 #include3 #include 4 using namespace std; 5 6 int fun(int a,int b)//或者直接(2<<20-1或者1<<21-1) 7 { 8 int temp,ans; 9 if(0==b)10 return 1;11 temp = fun(a,b/2);12 ans = temp*temp;13 if(b&1)14 return ans*a;15 else16 return ans;17 }18 19 int main()20 {21 int i,j,k;22 int ans = fun(2,21) - 1;23 cout< <
2、(10分)1、6、9三个数字,排列组合后能产生多少个平方数(例如:3的平方为9,则9为平方数)?用程序判断并将结果打印输出。
1 #include2 #include 3 #include 4 using namespace std; 5 6 const double eps = 0.0000000000001;// 1e-8,中间不可有乘号,阶码必须是整数 ,double后的小数点可为15位 7 8 int main() 9 {10 int i,j,k;11 int cnt = 0;12 int a[] = { 1,6,9};13 sort(a,a+3);14 do15 {16 //cout< < < <
3、(20分)Excel 表格中, 第12 行 4 列可表示为 R12C4, 第5 行 255 列可表示为 R5C255,还有另一种表示方式为 D12,IU5,输入 RC 格式转化为另一个种格式。
例:
INPUT:
2
R12C4
R5C255
OUTPUT:
D12
IU5
编程实现两种表示方法间的转化(第二行输入的2表示有两条RC格式需要转换)。
1 //这道题费了些神,以前也遇到过类似的但没做出来,今天我思量主要是我把自己搞得太疲惫啦 2 //行号直接输出就好啦,列数用栈处理下 3 #include4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 char str[20];11 int temp1 = 0,temp2 = 0;12 stack s;13 14 void fun()15 {16 int i,j;17 int len = strlen(str);18 temp1 = temp2 = 0;19 for(i=1; i 0)32 {33 int temp = temp2%26;34 s.push(temp);35 temp2 /= 26;36 }37 }38 39 int main()40 {41 int i,j,k;42 int T;43 cin>>T;44 while(T--)45 {46 temp1 = temp2 = 0;47 memset(str,0,sizeof(str));48 // while(!s.empty())49 // s.pop();50 cin>>str;51 fun();52 // for(i=0; i
4、(30分)有 3 枚骰子,玩家可押 1-6 中的一个数
1) 如果有 1 个数相同,则庄家 1:1 赔偿
2) 如果有 2 个数相同,则庄家 1:2 赔偿
3) 如果有 3 个数相同,则庄家 1:6 赔偿
4) 如果押的点数与其中一个骰子的乘积,等于另外两个数的乘积,则拿回自己的本钱,即庄家不赚不赔
5) 如果上述 4 种情况均满足,则选择最佳的方式
实践证明,不管怎么样,庄家都是获利的,请模拟 50 万次,假设每次押注都是 1 元,求庄家的盈利率(赚的钱/总押注金额)。
5、(30分)ABCDE 五人安排工作日程,每人每星期工作 5 天休息 2 天
1) 必须有 3 天所有人都要上班
2) 每个人连续上班不超过 3 天,周日到周一是连续工作
3) A、C 星期三必须上班
4) B、D、E 星期天都不上班
5) A、C 一星期至少见 4 次
6) A、B、C、D 中每天必须至少有 2 人上班,输出所有从星期一到星期天可能的情况,每种情况间用空行隔开,0 代表不
上班,1 代表上班。
例:
1 0 1 1 1 0 1
1 1 0 1 1 1 0
1 0 1 1 1 0 1
1 1 0 1 1 1 0
1 1 0 1 1 1 0