【题述】
题意:
多组输入,输入字符串长度n,输入k,n中每k个字符串应该相等
思路:
1.把字符串n,分成p份,每份长度为k
2.要输出最少要改变的次数,这属于少数服从多数的原则
3.把每k个字符串竖着看,比较一竖列里1和2的个数,少数服从多数原则,1多的话就把2改成1
4.有k个竖列,循环k次,计算每一个数列要改变的次数
【我的代码(通过代码)】
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
int n,k,i,p,j,sum,r;
while(cin>>n>>k){
int a[n],b[n],c[n];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
sum=0;
for(i=0;i<n;i++){
cin>>a[i];
}
p=n/k;//分成p份
for(i=0;i<k;i++){
for(j=0;j<p;j++){
if(a[i+j*k]==1)//计算每一竖列之中1和2的个数
b[i]++;
else
c[i]++;
}
}
for(r=0;r<k;r++){
if(b[r]<c[r])//如果1比2少,就改变1,改变次数是一竖列之中1的个数
sum+=b[r];
else
sum+=c[r];
}
cout<<sum<<endl;
}
return 0;
}