十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#includestdio.h
创新互联建站专注于企业全网营销推广、网站重做改版、西夏网站定制设计、自适应品牌网站建设、H5技术、商城网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为西夏等各大城市提供网站开发制作服务。
#define MAX 10000
char flags[MAX];
int main(){
int i,j,n,c;
while(scanf("%d",n)!=EOFn0n=MAXn%2==0){
for(i=0;in;i++){ flags[i] =0; printf("*");}
printf("\n");
for(i=0;in;i++){
for(j=0;jn;j++){
if(j!=i) flags[j] ^= 1;
printf(flags[j]?"0":"*");
}
printf("\n");
}
printf("Total :%d\n",n);
}
return 0;
}
应该是这个意思吧 不知道对不对 你看看吧
#includestdio.h
int main(void)
{
int n;//读入一个数,为结束的次数
int i;
int a[10];//10个硬币
int biaoji = 0;//当这个标记能被3或7整除,说明恰好数了3次或7次
scanf("%d", n);
for (i = 0; i 10; i++) //将硬币都初始化为正面的状态,即1
a[i] = 1;
biaoji = 1;//因为a[]的下标不允许超过9,故要重置
a[biaoji - 1] = !a[biaoji - 1];//改变硬币的状态
for (i = 0; i 10; i++)
printf("%d", a[i]);
return 0;
}
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
把硬币摆成一个圈就好搞 逻辑就清楚了 下面代码可以求出到底要多少次 代码没优化 N5不一定会精确..
#includeiostream
using namespace std;
const int maxNum=10000;//设置个最大值
const int reverseNum=5;//一次翻转几个
int main()
{
int n;//就是N 不要超过10000
bool m[maxNum]={0};//模拟硬币的布尔数组 值为true就是正面
cinn;//输入N的值
for(int i=0;in;m[i++]=true);//初始化前N个硬币为正面
int num=0,index=0,x=0;
//num是用来记录前N个硬币为反面的硬币数 也就是false的值 开始设置为0 因为前N个硬币都是正
//index是翻转的头下标 从第几个硬币开始翻由index决定
//x记录翻转次数 翻一次x+1
while(n!=num)//当记录为反的硬币不为N的时候就继续翻
{
int i=reverseNum;
while(i--)//用i记录翻转次数 翻5次
{
m[index]=!m[index];//翻
if(m[index])//翻完了是正面
--num;//就要扣掉
else
++num;//不是正就加上
index=index==n-1?0:index+1;//越界了就mod一下
}
++x;//每个大循环计数一次
}
coutxendl;//输出次数
return 0;
}
A数组用来存放硬币,数值1代表正面,0代表反面;
static int s;s是存放每列状态的数初始为0代表一列都没翻,第几位为1就代表第几列被翻转
int turncoin(A,S,N,n) //A(N*9数组) ,N是行数 n代表当次翻哪一列 初次调用n=0,代表第一列
{ int i=1;//因为每列只有两种状态,所以每列只翻一次
static int max=0;//用来存放翻转后正面朝上的最大硬币数;
static int S;//大S用来存储当前硬币堆的翻转状态
do {turncoin(A,S,N,n+1);if (n==8){ int tem=sum //sum为遍历A数组,所有元素之和(即为当前正面朝上的硬币数)
if(summax){S=s; //把当前翻转状态存储到S,S内总是存储着拥有正面朝上硬币数量最高的一种翻转状态;}}}while(i--transform(N,n));
//transform()函数翻转第N列的硬币 并且对s的第n位置一 成功返回ture 并且对是 实现就是for(i=0;
ireturn S; //好了 这里S根据S每一位就得道最终所要求的结果}
拓展资料:
一、题目描述:
一个翻硬币的游戏,有N(N 二、思路分析:
枚举2^9种列的翻法。
遍历N行,如果某行正面朝上的少,翻之;如果正面朝上的多,不翻
记下使得正面最多的方法即可
耗时O(2^9 * N)
这个得到的是最优解.用位运算效率还是很高的.
对每一列,都用一个9位的数表示,一共有N个
然后便利所有的9位状态,(000000000)-(111111111) (二进制)
对于每个状态,都与这N个数异或,每次异或后累加所有的1的值假设为k,如果k小于5则k=9-k.
对N个数累加所有的k,得到最终累加和.
求出所有状态下累加和最大的,就是正面朝上的硬币尽量多的个数.
翻面的方法横列分别是最优解的8位状态和与之对应的每个数异或后累加和k是否小于5.
1、首先,把手指的关节按照从指尖到指根的顺序记为第一指节、第二指节、第三指节。
2、然后把硬币用大拇指夹在手心里,用大拇指的力量把硬币推到食指第二三指节处。
3、利用大拇指的推力以及重力使硬币平躺在食指第二三指节处,接着要注意在硬币躺在食指上时中指要微微隆起,这样可以阻止硬币继续前行以致滑落。
4、然后用刚才微微隆起的中指的第二三指节向下压硬币的右侧,使得硬币翘起,并被夹在食指与中指之间。
5、继续下压中指并利用惯性使得被夹在指间的硬币完全掉在中指上并且具有向无名指翻滚的趋势,所以这时要注意无名指要微微隆起来阻止硬币掉出去,并且用无名指把硬币卡住。
6、卡住之后用无名指向下压使得硬币再次翘起,被夹在中指与无名指之间。
7、继续向下压无名指使得硬币向右倒在无名指上,并有向小指方向滑的趋势,所以这时要微微隆起小指,使得硬币不致于滑出手外。
8、向下压小指使得硬币被夹在无名指与小指之间,这时只需要用大拇指在手掌下方把硬币从小指与无名指的夹缝中推出来并推到食指的第二三关节上就又回到了第一步。