coursera 中计算概论的第七周 B-06作业(补充部分)
2014-04-04 15:06
337 查看
/* 描述 给定一组整数,要求利用数组把这组数保存起来。假定共有n个整数,则要使前面各数顺序 向后移m个位置,并使最后m各数变为最前面的m各数。 注意,不要用先输出后m个数,再输出前n-m个数的方法实现,也不要用两个数组的方式实现。 要求只用一个数组的方式实现,一定要保证在输出结果时,输出的顺序和数组中数的顺序是一致的。 输入 输入有两行:第一行包含一个正整数n和一个正整数m,第二行包含n个正整数。每两个正整数中间 用一个空格分开。 输出 输出有一行:经过循环移动后数组中整数的顺序依次输出,每两个整数之间用空格分隔。 样例输入 11 4 15 3 76 67 84 87 13 67 45 34 45 样例输出 67 45 34 45 15 3 76 67 84 87 13 */ #include <iostream> using namespace std; int main() { int n,m; cin >> n >> m; int a[10000]={0}; for(int i=0;i<n;i++) cin >> a[i]; for(int i=n-m;i<n;i++) cout << a[i] << " "; for(int i=0;i<n-m;i++) cout << a[i] << " "; cout << endl; return 0; }
注意,不要用先输出后m个数,再输出前n-m个数的方法实现,也不要用两个数组的方式实现。
//此次的思路为每次对数组移动一位,然后移动m次
#include <iostream> using namespace std; int main() { int n,m;//共有n个整数,右移m位 cin >> n >> m; int a[10000]={0}; for(int i=0;i<n;i++) cin >> a[i]; for(int i=0;i<m;i++) { //将数组右移一位 int tmp=a[n-1]; for(int j=n-2;j>=0;j--) a[j+1]=a[j]; a[0]=tmp; } //输出数组即可 for(int i=0;i<n;i++) cout << a[i] << " "; cout << endl; return 0; }
/* 描述 中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值 (如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数 是位于中间位置的两个数的平均值). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数) 输入 该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1 <= N <= 15000.(原来为1<=N<=10000,经测试确认,系统确实有10001的测试数据,因此将题面修改过来。 百练上相同题目的题面也已经修改。) 接着N行为N个数据的输入,N=0时结束输入 输出 输出中位数,每一组测试数据输出一行 提示 建议使用输入一组数据就输出一次答案的方式,openjudge上输入和输出是分开的。我也建议以后做题 大家都这么做,不要拿数组保存答案一并输出了。——助教 样例输入 4 10 30 20 40 3 40 30 50 4 1 2 3 4 0 样例输出 25 40 2 */ #include <iostream> using namespace std; int main() { int N=1; while(N) { cin >> N; int a[10000]={0}; for(int i=0;i<N;i++) cin >> a[i]; //对数组升序排序 for(int i=0;i<N;i++) for(int j=0;j<N-i;j++) { if(a[j]>a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j]=tmp; } } if(N%2==1) { cout << a[N/2] << endl; continue; } else if(N%2==0) { cout << (a[N/2-1]+a[N/2])/2 << endl; continue; } } return 0; }
/* 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以 把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整 数点,即0,1,2,……,L,都种有一棵树。 马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已 知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把 这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后 ,马路上还有多少棵树。 输入 输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的 长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的 整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出 输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。 样例输入 500 3 150 300 100 200 470 471 样例输出 298 */ #include <iostream> using namespace std; int main() { int a[10000]={0}; int l=0,m=0;//l为树的长度,m为被截去的段数 cin >> l >> m; int b[100][2]={0};//该数组保存每段的开始和结束 //初始化数组 for(int i=0;i<l+1;i++) a[i]=1;//把数组中有树的位置初始化为1 for(int i=0;i<m;i++) for(int j=0;j<2;j++) cin >> b[i][j]; //截取m段 for(int i=0;i<m;i++)//把截取片段内的数据归零 { int start=b[i][0]; int last=b[i][1]; for(int j=start;j<=last;j++) a[j]=0; } //计算有多少个1即可 int tree=0;//记录有多少颗树,既还剩多少个1 for(int i=0;i<l+1;i++) { if(a[i]==1) tree++; } cout << tree << endl; return 0; }
相关文章推荐
- coursera 中计算概论的第五周 B-04作业
- coursera 中计算概论的第六周 B-05作业
- coursera 中计算概论的第七周 B-06作业
- [Coursera 计算导论与C语言基础] 第七周作业
- coursera 中计算概论的第三周 B-01作业
- coursera 中计算概论的第四周 B-03作业
- coursera-北大-计算概论【已完成】
- 菜鸟之路【计算导论与C基础】练习2:计算概论第六周 B-05作业
- 服务计算作业7——servive-agenda(个人部分)
- 第七周算法概论作业—背包问题
- Coursera—machine learning(Andrew Ng)第七周编程作业
- [Coursera 计算导论与C语言基础] 第十周作业(上)
- 第七周作业三-均值计算最终落实版
- 【土狗之路】coursera上C语言基础第七周作业
- 吴恩达 Coursera Deep Learning 第五课 Sequence Models 第一周编程作业 1(部分选做)
- 菜鸟之路【计算导论与C基础】练习1 计算概论第五周 B-04作业
- 面向对象课程 - 寒假第四次作业 - C++计算器项目计算部分
- [Coursera 计算导论与C语言基础] 第六周作业
- Coursera计算概论A(李戈)教授课程
- [Coursera 计算导论与C语言基础] 第十周作业(下)