当前位置:首页 » 编程软件 » 编程题翻硬币

编程题翻硬币

发布时间: 2022-05-16 00:29:51

❶ C++编程 翻硬币

这题显然在线不可做,我们考虑离线,将所有操作保存下来,并且差分,把一次[l,r]取反变成两次[0,l-1]和[0,r]取反,记录在数组里,因为取两次反和不取反是一样的,且取反先后顺序没有影响,这样我们从0开始往后扫,扫到一个端点时,如果它之后(包括它自己)有偶数次操作,continue,否则将它和上一端点之间的位置取反。每个位置只会被取反一次所以是O(n)的

java编程 翻硬币问题

public class A {
public static void main(String[] args) {
int j=0;
int n=0;
while(true)
{
for(int i=0;i<6;i++)
{
int r = (int) (Math.random()*1000%2);
if(r==0)j+=1;
String s = r==0?"正面 ":"反面 ";
System.out.print(s);
}
if(j==3){System.out.println("第"+n+"次出现了三个正面和三个反面");break;}
else{
j=0;
n+=1;
System.out.println();
}
}
}
}

❸ 有谁能给我今年的NOIP分区联赛的题目

第八届全国青少年信息学奥林匹克联赛(NOIP2002)试题
(普及组PASCAL语言二小时完成)
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效

一.选择一个正确答案代码(A/B/C/D,填入每题的括号内(每题1.5分,多选无分,共30分)
1)微型计算机的问世是由于( ) 的出现。
A) 中小规模集成电路 B) 晶体管电路 C) (超)大规模集成电路 D) 电子管电路
2)下列说法中正确的是( ) 。
A) 计算机体积越大,其功能就越强
B) CPU的主频越高,其运行速度越快
C) 两个显示器屏幕大小相同,则它们的分辨率必定相同
D)点阵打印机的针数越多,则能打印的汉字字体越多
3)Windows98中,通过查找命令查找文件时,若输入F*.? , 则下列文件( ) 可以被查到。
A) F.BAS B) FABC.BAS C) F.C D) EF.
4)CPU处理数据的基本单位是字,一个字的字长( ) 。
A) 为8个二进制位 B) 为16个二进制位
C) 为32个二进制位 D) 与芯片的型号有关
5)资源管理器的目录前图标中增加"+"号,这个符号的意思是( ) 。
A) 该目录下的子目录已经展开 B) 该目录下还有子目录未展开
C) 该目录下没有子目录 D) 该目录为空目录,
6)下列哪一种程序设计语言是解释执行的( ) 。
A) Pascal B) GWBASIC C) C++ D) FORTRAN
7)启动WORD的不正确方法是( ) 。
A) 单击Office工具栏上的Word图标
B) 单击"开始"→"程序"→Word
C) 单击"开始"→"运行",并输入Word按回车
D) 双击桌面上的"Word快捷图标"
8)多媒体计算机是指( ) 计算机。
A) 专供家庭使用的 B) 装有CDROM的
C) 连接在网络上的高级 D) 具有处理文字、图形、声音、影像等信息的
9)在树型目录结构中,不允许两个文件名相同主要是指( ) 。
A) 同一个磁盘的不同目录下 B) 不同磁盘的同一个目录下
C) 不同磁盘的不同目录下、 D) 同一个磁盘的同一个目录下
10)用画笔(Paintbrush)绘制图形并存储在文件中,该图形文件的文件名缺省的后缀为( ) 。
A) .jpg B) .bmp C) .gif D).tiff
t11)E-ml地址中用户名和邮件所在服务器名之间的分隔符号是( ) 。
E A) # B) @ C) & D) $
12)(0.5)10=( ) 16.
A) 0.1 B) 0.75 C) 0.8 D) 0.25
13)IP v4地址是由( ) 位二进制数码表示的。
A) 16 B) 32 c) 24 D) 8
14)算式(2047)10一(3FF)16+(2000)8的结果是( ) 。
A) (2048)10 B) (2049)10 C) (3746)8 D) (1AF7)16
15)下列叙述中,错误的是( )
A) Excel中编辑的表格可以在Word中使用
B) 用Word编辑的文本可以存成纯文本文件
C) 用记事本(Notepa D) 编辑文本时可以插入图片
D) 用画笔(Paintbrush)绘图时可以输入文字
16)一个向量第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是( )
A) 110 B) 108 C) 100 D) 109
17)在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是( ) 。
A) 希尔排序 B) 起泡排序 C) 插入排序 D) 选择排序
18)在计算机网络中,Modem的功能是( )
A) 将模拟信号转换为数字信号 B) 将数字信号转换为模拟信号
C) 实现模拟信号与数字信号的相互转换 D) 实现将模拟信号的数字信号
19)设有一个含有13个元素的Hash表(O~12),Hash函数是:H(key)=key % 13,其中%是求余数运算。用线性探查法解决冲突,则对于序列(2、8、31、20、19、18、53、27),18应放在第几号格中( ) 。
A) 5 B) 9 C) 4 D) 0
20)要使1…8号格子的访问顺序为:82、63、73、1、4,则下图中的空格中应填人( ) 。
1 2 3 4 5 6 7 8
4 6 1 -1 7 3 2
A) 6 B) O C) 5 D) 3

二.问题求解:
1. 如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。
出口← ← 1 2 3 4 5
S↓

2.将N个红球和M个黄球排成一行。例如:N=2,M=3可得到以下6种排法:
红红黄黄黄 红黄红黄黄 红黄黄红黄 黄红红黄黄 黄红黄红黄 黄黄黄红红
问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)

三.阅读程序:
program exp1;
var i,j,k,n,,L0,L1,LK:Integer;
a :array [0..20] of integer;
begin
readln(n,k);
for i:=0 to n-1 do a[i]:=i+1;
a[n]:=a[n-1];L0:=n-1; Lk:=n-1;
for I:=1 to n-1 do
begin
L1:=L0-k; if (l1<0) then L1:=L1+n;
If (l1=Lk) then begin
A[L0]:=a[n]; Lk:=Lk-1; a[n]:=a[Lk]; l0:=lk
End;
Else
Begin
A[l0]:=a[l1];l0:=l1;
End;
End;
A[L0]:=a[n];
For I:=0 to n-1 do write(a[I]:40;
Writeln;
End.
输入:10 4
输出:

2)program exp2;
var n,jr,jw,jb:integer;
ch1:char;
ch:array[1..20]d char;
begin
readln(n);
for i:=1 to n do read(ch[i]):
jr:=1;jwz=n;jb:=n;:
while (jr<=jw)do
begin
if(ch[jw]='R')
then begin
ch1:=Ch[jr];Ch[jr]:=ch[jw];ch[jw]:=ch1:jr:=jr+13
end
else if ch[jw]='W'
then jw:=jw-1
else begin
ch1:=ch[jw];ch[jw]:=ch[jb];ch[jb]:=ch1;jw:=jw-1;jb:=jb-1;
end
end;
for i:=1 to n do write(ch[i]);
writeln;
end.
输入:10
RBRBWWRBBR
输出:

3)Pmgram exp3;
Var I,j,p,n,q,s:integer;
a :array[1..20]of integer;
begin
readln(p,n,q);j :=21;
while (n>0)do
begin
j:=j-1;a[j]:=n mod 10;n:=n div 10;
end;
s:=0;
for i:=j t0 20 do s:=s*p+a[i];
writeln(s);j :=21;
while (s>O)do
begin j:=j-1;a[j]:=s mod q;s:=s div q;end;
for i:=j to 20 do write(a[i]);readln;
end.
输入:7 3051 8
输出:

四.完善程序:
1.问题描述:将n个整数分成k组(k≤n,要求每组不能为空),显然这k个部分均可得到一个各自的和s1,s2,……sk,定义整数P为:
P=(S1-S2)2+(S1一S3)2+……+(S1-Sk)2+(s2-s3)2+……+(Sk-1-Sk)2
问题求解:求出一种分法,使P为最小(若有多种方案仅记一种〉
程序说明:
数组:a[1],a[2],...A[N]存放原数
s[1],s[2],...,s[K]存放每个部分的和
b[1],b[2],...,b[N]穷举用临时空间
d[1],d[2],...,d[N]存放最佳方案
程序:
program exp4;
Var i,j,n,k : integer;
a :array [1..100] of integer;
b,d:array [0..100] of integer;
s :array[1..30] of integer;
begin
readln(n,k);
for I:=1 to n do read(a[I]);
for I:=0 to n do b[I]:=1;
cmin:=1000000;
while (b[0]=1) do
begin
for I:=1 to k do ①
for I:=1 to n do

sum:=0;
for I:=1 to k-1 do
for j:= ③
sum:=sum+(s[I]-s[j])*(s[I]-s[j]);
if ④ then
begin
cmin:=sum;
for I:=1 to n do d[I]:=b[I];
end;
j:=n;
while ⑤ do j:=j-1;
b[j]:=b[j]+1;
for I:=j+1 to n do ⑥
end;
writeln(cmin);
for I:=1 to n do write(d[I]:40);
writeln;
end.
2. 问题描述:工厂在每天的生产中,需要一定数量的零件,同时也可以知道每天生产一个零件的生产单价。在N天的生产中,当天生产的零件可以满足当天的需要,若当天用不完,可以放到下一天去使用,但要收取每个零件的保管费,不同的天收取的费用也不相同。
问题求解:求得一个N天的生产计划(即N天中每天应生产零件个数),使总的费用最少。
输入:N(天数N<=29)
每天的需求量(N个整数)
每天生产零件的单价(N个整数)
每天保管零件的单价(N个整数)
输出:每天的生产零件个数(N个整数)
例如:当N=3时,其需要量与费用如下:
第一天 第二天 第三天
需要量 25 15 30
生产单价 20 30 32
保管单价 5 l0 0
生产计划的安排可以有许多方案,如下面的三种:
第一天 第二天 第三天 总的费用
25 15 30 25*2O+15*30+30*32=1910
40 0 30 40*20+15*5+30*32=1835
70 0 0 70*20+45*5+30*10=1925
程序说明:
b[n]:存放每天的需求量
c[n]:每天生产零件的单价
d[n]:每天保管零件的单价
e[n]:生产计划
程序:
Program exp5;
Var
i,j,n,yu,j0,j1,s:integer;
b,c,d,e: array[0..30]of integer; begin
readln(n);
for i:=1 to n do readln(b[[i],c[I],d[i]];
fori:=1 to n do e[i]:=0;
① :=10000;c[n+2]:=0;b[n+1]:=0;jO:=1;
while (jO<=n)do
begin
yu:=c[j0]; j1:=jO; s:=b[j0];
while ② do
begin
③ j1:=j1+1;s:=s+b[j1];
end;
④ jO:=j1+1;
end;
for i:=1 to n do ⑤
readln;
end.

❹ 翻硬币问题分析

我们把每一次的翻转称为一次“小翻转”,从顶上开始连续翻n次称为
一次“大翻转”。最后翻到全是正面朝上的状态时,如果用了 a 次大翻转和 b 次小翻转,那么总的翻转次数是 a*n + b。研究一次大翻转的置换结构。自底向上(为方便我们实际上用自左向右),用 1, 2, 3, ..., n 标记 n 个硬币,用 a' 表示硬币 a 的反面朝上状态。我们还在这一摞硬币的右端放一面镜子,那么,初始状态是:('|' 表示镜子的位置)
[1 2 3 4 ... n-1 n | n' (n-1)' ... 4' 3' 2' 1']
经过一次大翻转后,成为:
[2 4 6 ... 5' 3' 1' | 1 3 5 ... 6' 4' 2']
这个变换很有规律。只要令 a'=-a,可以看出,一次大翻转就是把编号
为 c 的硬币变换到 c/2 (mod 2n+1) 的位置。看其逆变缓将更明显。
显然,如果 2^m=1 (mod 2n+1),那么经过 m 次大翻转后,所有硬币都
归到原位而且面朝上。此时共用了 m*n 次小翻转。
显然,如果 2^m=-1 (mod 2n+1),那么经过 m 次大翻转后,所有硬币
都将归到原位,并且正面朝下。如果不做最后那个大翻转的最后那个n
个硬币翻过来的小翻转,那么就能得到正面全朝下的状态,此时需要
m*n-1 次小翻转。剩下的问题是,证明只有上面所述两种情况下才会出现正面全朝上的局面。需要证明几个事实:
1) 进行任意次大翻转后,再进行 0 < b < n-1 次小翻转,那么不可
能出现全部硬币正面朝上的局面。
(即要出现正面全朝上的情况,必然有 b=0 或 b=n-1.)
2) 如果经过 m 次大翻转后全部硬币正面朝上,那么确实每个硬币都
回到了原来的位置。
3) 如果经过 m 次大翻转后全部硬币正面朝下,那么确实每个硬币都
回到了原来的位置。
2) 与 3) 比较容易证明,证法也类似。1) 证起来麻烦一些。当然可以用数学归纳法来证明。
这个就是这个程序的思路,有了思路,我想你这个T和D应该就知道是什么意思了吧?陈晨!

c语言,编写模拟翻硬币得程序。

#include<stdio.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语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。

❻ 矩阵翻硬币Java编程问题

package;

importjava.util.Arrays;

/**
*标题:矩阵翻硬币<br>
*
*@authorYugi111
*/
publicclassQ
{
//假设0表示反面
//小明先把硬币摆成了一个n行m列的矩阵。
int[][]qArray={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};

/**
*随后,小明对“每一个”硬币分别进行"一次"Q操作。<br>
*对第x行第y列的硬币进行Q操作的定义:将所有第i*x行,第j*y列的硬币进行翻转。
*/
privatevoidqTurn()
{
//其中i和j为任意使操作可行的正整数>0,行号和列号都是从1开始。
for(intx=1;x<qArray.length;x++)
{
for(inty=1;y<qArray[x].length;y++)
{
for(inti=1;i<qArray.length/x;i++)
{
for(intj=1;j<qArray[x].length/y;j++)
{
//对“每一个”硬币分别进行"一次"Q操作
qArray[i*x][j*y]=qArray[i*x][j*y]==0?1:0;
}
}
}
}
}

publicstaticvoidmain(String[]args)
{
Qq=newQ();
q.qTurn();
for(inti=0;i<q.qArray.length;i++)
{
System.out.println(Arrays.toString(q.qArray[i]));
}
System.out.println("当小明对所有硬币都进行了一次Q操作后,他发现了一个奇迹——所有硬币均为正面朝上。");
System.out.println("小明想知道最开始有多少枚硬币是反面朝上的。"+"于是,他向他的好朋友小M寻求帮助。 "+"聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,"
+"即可恢复到最开始的状态。然而小明很懒,不愿意照做。"+"于是小明希望你给出他更好的方法。帮他计算出答案");
System.out.println(" 由于0表示反面,1表示正面. 所以: ");
intcount=0;
for(inti=0;i<q.qArray.length;i++)
{
for(intj=0;j<q.qArray[i].length;j++)
{
if(q.qArray[i][j]==1)
{
count++;
}
}
}
System.out.println("最开始有"+count+"枚硬币是反面朝上的");
}
}

❼ C++编程题目 定义一个类coin 模拟翻硬币游戏

#include <stdio.h>
class COIN
{
public:
COIN(int n1,int k1){
n = n1;
k = k1;
a = new int[n];
for(int i = 0; i < n ; i++){
a[i] = 1;
}
}
~COIN(){
delete []a;
}
void fun(){
int i = 0;
for(int j = 1 ; j <= k ;j++){
i = (j - 1) % n; //写为 i = j%n 亦可
if( ! ( j % 3) ){
a[i] = 1 - a[i] ;
continue;
}
if( ! (j % 5)){
a[i] = 1 - a[i];
continue;
}
}
}
void print(){
int i;
for(i = 0 ; i < n - 1 ; i ++){
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}

private:
int * a;
int n;
int k;

};

int main ()
{
COIN *a = new COIN(12,100);
a->fun();
a->print();
delete a;
}

❽ pascal程序题翻硬币

这种题没什么技术含量的,纯粹考数学,手算就出来了.
n=6的时候:
000000 (0)
111110 (1)
100001 (2)
011100 (3)
110011 (4)
001000 (5)
111111 (6)
一共6步.
n=7的时候:
0000000 (0)
1111100 (1)
1000010 (2)
1111111 (3)
一共3步,显然没有更少的了.
n=8的时候:
00000000 (0)
11111000 (1)
10000100 (2)
01110000 (3)
11111111 (4)
一共4步.
当n>=9的时候:
定义f(n)为最少步数.
若n=5k,则顺着翻k次即可.f(5k)=k
若n=5k+1,先讨论左边8个:
00000000
11111000
11100111
翻2次,使得8个中有6个被翻过来剩下2个,一共剩5k+1-8+2=5k-5个,再顺着翻k-1次即可.所以f(5k+1)=k+1
若n=5k+2,先讨论左边6个:
000000
111110
100001
翻了2次,使得6个中有2个被翻过来,一共剩5k+2-2=5k,顺着翻,所以f(5k+2)=k+2
若n=5k+3,先讨论左边9个:
000000000
111110000
111101111
翻了2次,有8个翻过来,一共剩5k+3-8=5k-5,顺着翻,所以f(5k+3)=k-1+2=k+1
若n=5k+4,先讨论左边7个:
0000000
1111100
1100011
翻了2次,有4个翻过来,一共剩5k+4-4=5k个,顺着翻,所以f(5k+4)=k+2

下面讨论下上面的正确性:
5k个至少要翻k次,这是显然的.5k+1,5k+2,5k+3,5k+4分别至少要翻k+1次,也是显然的.
所以f(5k)>=k, f(5k+1)>=k+1, f(5k+2)>=k+1, f(5k+3)>=k+1, f(5k+4)>=k+1
由于最终所有的硬币都要被翻过来,所以每个硬币都必须被翻奇数次.
不妨设第k个硬币被翻ak次.
f(n) = a1+a2+...+an ≡ 1+1+...+1(n个1) ≡ n(mod 2) {同余,也就是同奇偶}
所以f(5k+2)与5k+2同奇偶,但是k+1与5k+2不可能同奇偶,所以f(5k+2)>=k+2.
同理,f(5k+4)与5k+4同奇偶,但5k+4与k+1不可能同奇偶,所以f(5k+2)>=k+2.
综上,可知讨论出的最小值正确.
var n: longint;
begin
readln(n);
if n = 6 then begin writeln(6); exit; end;
if n = 7 then begin writeln(3); exit; end;
if n = 8 then begin writeln(4); exit; end;
if n mod 5 = 0 then begin writeln(n div 5); exit; end;
if n mod 5 = 1 then begin writeln(n div 5 + 1); exit; end;
if n mod 5 = 2 then begin writeln(n div 5 + 2); exit; end;
if n mod 5 = 3 then begin writeln(n div 5 + 1); exit; end;
if n mod 5 = 4 then begin writeln(n div 5 + 2); exit; end;
end.

❾ 高手帮忙一道c++排序编程题(请算法简明清晰,我用MinGW编译

#include<stdio.h>
main()
int a=0,b=1;
{

}

❿ 解释下fillchar(a,sizeof(a),false)

fillchar
Pascal(一种同C语言的编程语言)的一个函数。
C语言 网络内容来自于: C语言Combined Language(组合语言)的中英混合简称是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

c语言C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。

热点内容
方舟怎么加入服务器闪退 发布:2024-05-03 14:05:27 浏览:491
安卓心跳怎么打出来 发布:2024-05-03 13:59:23 浏览:100
存储标准性 发布:2024-05-03 13:37:07 浏览:416
液碱存储 发布:2024-05-03 13:21:13 浏览:156
linux如何改配置文件 发布:2024-05-03 13:00:54 浏览:31
哪个安卓模拟器老爷机带得动 发布:2024-05-03 13:00:49 浏览:576
编程与实战 发布:2024-05-03 12:54:30 浏览:38
电脑开机有密码rpc服务器不可用 发布:2024-05-03 12:40:54 浏览:471
硬件的算法 发布:2024-05-03 12:34:28 浏览:388
支付密码为什么就六位 发布:2024-05-03 12:29:17 浏览:920