2016-07-17 5 views
-1
 #include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 
void f(char a[], int n, int k, int l); 

int main(){ 
    int n; 
    int k; 
    scanf("%d %d",&n,&k); 
    char number[100000]; 
    scanf("%s",number); 
    int l= 0; 
    if(n%2 == 0) f(number,n,k,l); 
    else {l = 1;f(number,n,k,l);} 
    return 0; 
} 
void f(char a[], int n, int k, int l) { 
    int c = 0; 
    for(int i = 0; i <= n/2; i++) { 
     if(a[n/2 - 1 - i] > a[n/2 + l + i]) {a[n/2 + l + i] = a[n/2 - 1 - i];c++;} 
     if(a[n/2 - 1 - i] < a[n/2 + l + i]) {a[n/2 - 1 - i] = a[n/2 + l + i]; c++;} 
     if(c > k) {printf("-1"); break;} 
    } 
    if(c <= k) { 
     int i = 0; 
    while(c != k || c != (k-1)) { 
     if(a[i] != 57) { a[i] = 57; a[n-1-i] = 57; c+=2;} 
     i++; 
    } 
     if(c == k-1 && n%2 == 1) a[n/2] = 57; 
     printf("%s", a); 
    } 
    return; 
} 

私は、長さnの文字列を、k個の文字を変更して、できるだけ大きくすることで、文字列を作成しようとしています。例: 入力:4 1 出力:3993 入力:6 3 出力:992299 は、セグメンテーションフォールトの上に私を導いてくださいとそれを引き起こしています。 どうもありがとう:D静的配列メモリ割り当てを使用したcのセグメンテーション違反。

答えて

1

条件使用

while(c != k || c != (k-1)) { 

では間違っています。それは常に真実です。そのエラーのために、 iが増加し続け、境界外に aにアクセスしてしまいます。

||の代わりに&&を使用する必要があります。

while(c != k && c != (k-1)) { 
      ^^^^ 
+0

@R Sahuありがとうございます。 しかし、それは完全には機能しませんでした。 私はまだ一部のテストケースでセグメント化エラーが発生しています。 –

関連する問題