习题8-3 数组循环右移 (20 分)
#include <stdio.h>
#define MAXN 10
void ArrayShift( int a[], int n, int m );
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
void ArrayShift( int a[], int n, int m ){
int i,j,b[100],k=0;
m=m%6;
if(m==0){
return ;
}
for(i=n-m;i<n;i++){
b[k]=a[i];
k++;
}
for(i=0;i<n-m;i++){
b[k]=a[i];
k++;
}
for(j=0;j<n;j++){
a[j]=b[j];
}
}
总结:这道题没有全部做对,不知道哪里出了问题,这个题还是比较简单,找清楚移动的规律,推到出来式子,进行修改即可
习题8-4 报数 (20 分)
链接如下:PTA | 程序设计类实验辅助教学平台
我的错误代码还在修改中 ,我想的挺复杂的,脑子一团麻,像这种感觉有点思维含量的就有点吃力,我感觉这一部分是我的薄弱点
#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
void CountOff( int n, int m, int out[] ){
int a[100],i,k=1,flag=1,t=0,z;
for(i=0;i<n;i++){
out[i]=0;
}
for(i=0;i<n;i++){
a[i]=i+1;
}
while(t!=n){
for(i=0;i<n;i++){
if(i!=n-1){
if((flag!=m)&(a[i]>0)){
flag++;
}
else{
out[i]=k;
a[i]=-1;
k++;
t++;
flag=1;
}
}
else{
i=0;
flag++;
if(flag==m){
out[i]=k;
a[i]=-1;
k++;
t++;
flag=1;
}
}
}
}
}
第二次代码
#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
void CountOff( int n, int m, int out[] ){
int a[100],i,pos=1,z,q=0;
int k =1;
for(i=0;i<n;i++){
out[i]=0;
}
for(i=0;i<n;i++){
a[i]=i+1;
}
for(i=0;i<n;i++){
if(i!=n-1){
if((pos!=m)&&(a[i]>0)){
pos++;
}
else{
out[i]=k;
if(k==n){
q=1;
break;
}
a[i]=-1;
k++;
pos=0;
}
}
else{
if((pos!=m)&&(a[i]>0)){
pos++;
i=0;
}
else{
out[i]=k;
if(k==n){
q=1;
break;
}
a[i]=-1;
k++;
i=0;
pos=0;
}
}
}
}
也是不对的结果,我感觉我把问题考虑的太过复杂了。还是跑不出来有很大的问题。
#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
void CountOff( int n, int m, int out[] ){
int k,i,j=0;
for(i=0;i<n;i++)out[i]=0;
for(i=0;i<n;i++){
k=0;
while(j>=0){//这个bug卡了我半个小时,j++也是不行的
j%=n;
if(out[j]==0)k++;
if(k==m){
out[j]=i+1;
break;
}
j++;
}
}
}