# include<bits/stdc++.h>
using namespace std;
int p[2],n,k,i;
int main()
{
cin>>p[0]>>p[1]>>n;
k=p[1]>p[0];
for(i=1; i<n; i++,p[k]--,k^=1) //k在0和1之间来回变换
cout<<char(k+'0');
cout<<string(p[k],k+'0')<<string(p[!k],!k+'0');
//重复输出第一个参数个第二个参数的字符
}
#include "iostream"
using namespace std;
int main()
{
int a,b,x,n;
char u,v;
cin>>a>>b>>x;
n=a+b;
if(a>b) u='0',v='1';
else {u='1',v='0';swap(a,b);}
for(int i=0;i<x/2;i++) {cout<<u<<v;a--,b--;}
if(x%2==0){
while(b--) cout<<v;
while(a--) cout<<u;
}
else{
while(a--) cout<<u;
while(b--) cout<<v;
}
return 0;
}
第一种方法,因为后面要输出一堆0和1的时候肯定有一个满足条件即连续输出完1(或0)还要连续输出0(或1),此时中间肯定有相邻两位不同,因此前面计算要少一个。
第二种方法,输出2/x对10或01,若x为偶数,则只差一个,如x=4,输出1010后只满足三个,1010后面就应该是连续的0和连续的1。若x为奇数,则差两个,如x=3,输出10后只满足1个,10后面就应该为连续的1和连续的0