当前位置:   article > 正文

c++版本代码的数据结构与算法题(严蔚敏C语言版本绪论)_数据结构严蔚敏c++

数据结构严蔚敏c++

1.16试写一算法,自大到小依次输出顺序读入的三个整数X,Y,和Z的值。

输入输出样例如下:

输入:520 738 28

输出:738 520 28

  1. #include <iostream> // 引入C++标准输入输出流库
  2. using namespace std; // 使用std命名空间
  3. int main() { // 主函数
  4. int x, y, z, temp = 0; // 定义三个整数变量x、y、z,以及一个临时变量temp用于交换数值
  5. cin >> x >> y >> z; // 从标准输入读取三个整数,依次赋值给x、y、z
  6. // 下面的if-else语句用于将x、y、z中的最大值移动到x位置
  7. if (x < y) { // 如果x小于y,则交换x和y的值
  8. temp = y; // 将y的值暂存到temp中
  9. y = x; // 将x的值赋给y
  10. x = temp; // 将temp(原y的值)赋给x
  11. }
  12. // 判断x和z的大小关系,并进行相应交换,确保x始终为已知的最大值
  13. if (x < z) {
  14. temp = z; // 若x小于z,则先将z的值暂存到temp
  15. z = y; // 将y的值赋给z
  16. y = x; // 将当前x(原最大值)赋给y
  17. x = temp; // 将temp(原z的值,即新的最大值)赋给x
  18. } else { // 如果x不小于z,则只需比较y和z,保证y和z之间的较大值位于y
  19. if (y < z) {
  20. temp = z; // 若y小于z,则将z的值暂存到temp
  21. z = y; // 将y的值赋给z
  22. y = temp; // 将temp(原z的值,即y和z之间的较大值)赋给y
  23. }
  24. }
  25. cout << x << " " << y << " " << z; // 输出自大到小排列后的三个整数
  26. }
  27. // 输入样例:520 738 28
  28. // 输出结果:738 520 28

1.17已知k阶斐波那契序列的定义为 

f_0=0,

f_1=0, .

..,

f_{k-2}=0,

f_{k-1}=1

f_n=f_{n-1}+f_{n-2}+...+f_{n-k},

n=k,k+1,...

试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

  1. // 引入C++标准输入输出流库
  2. #include <iostream>
  3. // 使用std命名空间,简化代码中的输入输出操作
  4. using namespace std;
  5. // 定义计算第m项斐波那契数列(以k为模)的函数FibNum
  6. int FibNum(int m, int k) {
  7. // 当m小于k-1时,返回0,表示该位置的斐波那契数列值为0
  8. if (m < k - 1) {
  9. return 0;
  10. }
  11. // 当m等于k-1时,返回1,表示该位置的斐波那契数列值为1
  12. else if (m == k - 1) {
  13. return 1;
  14. }
  15. // 当m大于等于k时,采用递归方式计算该位置的斐波那契数列值
  16. else {
  17. int c = 0; // 初始化累加器变量c为0
  18. // 通过循环从1到k计算每一项对结果的贡献
  19. for (int i = 1; i <= k; i++) {
  20. // 将FibNum(m-i, k)的结果累加到c中
  21. c = c + FibNum(m - i, k);
  22. }
  23. // 返回累加后的结果c作为第m项斐波那契数列(以k为模)的值
  24. return c;
  25. }
  26. }
  27. // 主函数main
  28. int main() {
  29. // 定义变量m和k,分别用于存储需要计算的斐波那契数列项数和模数
  30. int m = 0, k;
  31. // 从标准输入读取k和m的值
  32. cin >> k >> m;
  33. // 调用FibNum函数计算并输出第m项斐波那契数列(以k为模)的值
  34. cout << FibNum(m, k);
  35. // 注意:本程序未包含结束语句(如return 0;),在C++中main函数可隐式返回0
  36. }

1.19假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,
并构成一张表,表中每一行形式为(项目名称,性别,校名,成绩,得分)
处理上述表格,以统计各院校男,女总分和团体总分,并输出。

(本程序编译通过即可)

本程序采用如下数据:(无需在终端输入,写在程序内即可)

{"100m短跑",male,'a',96,9},

{"100m短跑",male,'b',95,8},

{"100m短跑",male,'c',90,7},

{"100m短跑",male,'d',96,9},

{"100m短跑",male,'e',100,10},

{"800m长跑",female,'a',95,7},

{"800m长跑",female,'b',98,10},

{"800m长跑",female,'c',96,8},

{"800m长跑",female,'d',97,9},

{"800m长跑",female,'e',97,9},

{"800m长跑",female,'f',94,6}

输出:

a大学团体分:16.00 男:9.00 女:7.00
b大学团体分:18.00 男:8.00 女:10.00
c大学团体分:15.00 男:7.00 女:8.00
d大学团体分:18.00 男:9.00 女:9.00
e大学团体分:19.00 男:10.00 女:9.00

  1. // 1.19假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,
  2. // 并构成一张表,表中每一行形式为(项目名称,性别,校名,成绩,得分)
  3. // 处理上述表格,以统计各院校男,女总分和团体总分,并输出。
  4. // (本程序编译通过即可)
  5. // 本程序采用如下数据:(无需在终端输入,写在程序内即可)
  6. // {"100m短跑",male,'a',96,9},
  7. // {"100m短跑",male,'b',95,8},
  8. // {"100m短跑",male,'c',90,7},
  9. // {"100m短跑",male,'d',96,9},
  10. // {"100m短跑",male,'e',100,10},
  11. // {"800m长跑",female,'a',95,7},
  12. // {"800m长跑",female,'a',95,7},
  13. // {"800m长跑",female,'c',96,8},
  14. // {"800m长跑",female,'d',97,9},
  15. // {"800m长跑",female,'e',97,9},
  16. // 输出:
  17. // a大学团体分:16.00 男:9.00 女:7.00
  18. // b大学团体分:18.00 男:8.00 女:10.00
  19. // c大学团体分:15.00 男:7.00 女:8.00
  20. // d大学团体分:18.00 男:9.00 女:9.00
  21. // e大学团体分:19.00 男:10.00 女:9.00
  22. #include <iostream>
  23. #include <string>
  24. #include <iomanip>
  25. #define male 1
  26. #define female 0
  27. using namespace std;
  28. class Student{
  29. public:
  30. Student() {}
  31. int sex;
  32. double scores;
  33. double scores1;
  34. string project;
  35. char SchoolName;
  36. Student(string project1,int sex1,char SchoolName1,double score,double score1){
  37. this->sex=sex1;
  38. this->project=project1;
  39. this->SchoolName=SchoolName1;
  40. this->scores=score;
  41. this->scores1=score1;
  42. }
  43. };
  44. int main(){
  45. double n1,n2,n3,n4,n5,n1_male,n2_male,n3_male,n4_male,n5_male;
  46. n1=n2=n3=n4=n5=n1_male=n2_male=n3_male=n4_male=n5_male=0.00;
  47. Student object[10];
  48. object[0]=Student ("100m短跑",male,'a',96.0,9.0);
  49. object[1]=Student ("100m短跑",male,'b',95.0,8.0);
  50. object[2]=Student ("100m短跑",male,'c',90.0,7.0);
  51. object[3]=Student ("100m短跑",male,'d',96.0,9.0);
  52. object[4]=Student ("100m短跑",male,'e',100.0,10.0);
  53. object[5]=Student ("800m长跑",female,'a',95.0,7.0);
  54. object[6]=Student ("800m长跑",female,'b',98.0,10.0);
  55. object[7]=Student ("800m长跑",female,'c',96.0,8.0);
  56. object[8]=Student ("800m长跑",female,'d',97.0,9.0);
  57. object[9]=Student ("800m长跑",female,'e',97.0,9.0);
  58. for(int i=0;i<10;i++){
  59. if ( object[i].SchoolName =='a'){
  60. if (object[i].sex==male){
  61. n1_male+=object[i].scores1;
  62. }
  63. n1+=object[i].scores1;
  64. }
  65. else if ( object[i].SchoolName =='b'){
  66. if (object[i].sex==male){
  67. n2_male+=object[i].scores1;
  68. }
  69. n2+=object[i].scores1;
  70. }else if ( object[i].SchoolName =='c'){
  71. if (object[i].sex==male){
  72. n3_male+=object[i].scores1;
  73. }
  74. n3+=object[i].scores1;
  75. }else if ( object[i].SchoolName =='d'){
  76. if (object[i].sex==male){
  77. n4_male+=object[i].scores1;
  78. }
  79. n4+=object[i].scores1;
  80. } else{
  81. if (object[i].sex==male){
  82. n5_male+=object[i].scores1;
  83. }
  84. n5+=object[i].scores1;
  85. }
  86. }
  87. cout << fixed << setprecision(2); // 设置输出精度为2位小数,后续所有浮点数都会遵循此设置
  88. cout<<"a大学团体分:"<<n1<<" 男:"<<n1_male<<" 女:"<<n1-n1_male<<endl;
  89. cout<<"b大学团体分:"<<n2<<" 男:"<<n2_male<<" 女:"<<n2-n2_male<<endl;
  90. cout<<"c大学团体分:"<<n3<<" 男:"<<n3_male<<" 女:"<<n3-n3_male<<endl;
  91. cout<<"d大学团体分:"<<n4<<" 男:"<<n4_male<<" 女:"<<n4-n4_male<<endl;
  92. cout<<"e大学团体分:"<<n5<<" 男:"<<n5_male<<" 女:"<<n5-n5_male<<endl;
  93. }

4. (程序题, 25分)

1.18计算i!×2^i的值并存入数组a[0…n-1]的第i个分量中 (i=0,1,2,…,n)。假设计算机中允许的整数最大值为MAXINT,则对某个k(0≤k≤n-1)使k!×2^k>MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。

输入输出样例如下:

20

a[0]=1 a[1]=2 a[2]=8 a[3]=48 a[4]=384 a[5]=3840 a[6]=46080 a[7]=645120 a[8]=10321920 a[9]=185794560 a[10]=3715891200 a[11]=81749606400 a[12]=1961990553600 a[13]=51011754393600 a[14]=1428329123020800 a[15]=42849873690624000 a[16]=1371195958099968000 a[17]=9727174427979808768 a[18]=18136886080501186560 输出错误,已超过最大值

  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. int main(){
  5. unsigned long long int c=1;
  6. unsigned long long int b=1;
  7. unsigned long long int d=1;
  8. unsigned long long int e=1;
  9. int ca=0;
  10. unsigned long long int a[ca]={0};
  11. cin>>ca;
  12. if(ca>0||ca==0){
  13. a[ca]=1;
  14. cout<<"a[0]="<<1<<" ";
  15. for(int i=1;i<ca;i++){
  16. for(int k=1;k<i+1;k++){
  17. c*=k;
  18. }
  19. for(int s=1;s<i+1;s++){
  20. e*=2;
  21. }
  22. b=e*c;
  23. c=1;
  24. e=1;
  25. if (b>d){
  26. d=b;
  27. a[ca]=b;
  28. cout<<"a["<<i<<"]"<<"="<<a[ca]<<" ";
  29. }
  30. else{
  31. cout<<"输出错误,已超过最大值 "<<endl;
  32. break;
  33. }
  34. }
  35. }else{
  36. return 0;
  37. }
  38. }

该题主要是要考虑,一旦unsiged long long超过最大限度,将会溢出,以至于在一个递增数列中,存在后一项比前一项小的现象。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/908881
推荐阅读
相关标签
  

闽ICP备14008679号