第二次博客作业
Q1:
目前我觉得薄弱的知识点有第八章结构体那一块和第九章指针那一块,主要是指针的运用不够理解,不能好好地使用。对于指针知识的获取,我是不断看书上的例题和概念来理解,并不断尝试去使用;而对于结构体,我便是通过对书本上例题的模仿,来解决题目。
Q2:
题意:数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
解题思路:我是先分类讨论要移动的值,然后先输出要先输出的,之后才输出后面需要输出的,并没有采用到改变数组的值。
代码:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int n, m;
cin>>n>>m;
int data1[n];
for(int i = 0; i<n; i++){
cin>>data1[i];
}
m = m % n;
int count=0;
for(int i = n-m; i<n; i++ ){
cout << data1[i];
count++;
if(count<n){
cout << " ";
}
}
for(int i = 0; i<n-m; i++ ){
cout << data1[i];
count++;
if(count<n){
cout << " ";
}
}
return 0;
}
核心技术解决:就是要确定最先输的是哪个数,然后想办法输出。
解题存在的问题以及如何解决:
起初是想改变数组对应位置的值,但发现这样做又难又麻烦。因此,改换思路,并通过网上的借鉴,用改换的思路打出代码。