问题求解作业.docx
- 文档编号:7054299
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:18
- 大小:20.50KB
问题求解作业.docx
《问题求解作业.docx》由会员分享,可在线阅读,更多相关《问题求解作业.docx(18页珍藏版)》请在冰豆网上搜索。
问题求解作业
1、找规律
1. 1,2,4,7,8,11,14,16,17,19,22,26,28,29,41,44,?
解题思路:
数列中没有3,5,包含3,5以及3,5的倍数,因此只需排除即可。
代码:
#include
intmain()
{
inti,n;
printf("inputthenumberofn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if((i%3!
=0)&&(i%5!
=0)&&(i/10!
=3)&&(i%10!
=3))//排除不需要的数将剩下的数输出
printf("%d",i);
}
return0;
}
1.编程写出下一行数字
13
1113
3113
132113
1113122113
311311222113
解题思路:
计算上一行的每个数出现的次数即可知道第二行的数字,有几个上一行的数。
代码:
#include
usingnamespacestd;
inta[200],b[200];//存放序列
voidarraycopy(int*a,int*b,intt);
voiddisplay(int*aa,intn);
intmain(){
a[0]=1;
a[1]=3;
intt=2,flag=9;//t:
每次数组中元素个数;flag+1为需要打印的行数
inti,j;
display(a,t);
while(flag>0){
intcount=1;//count为计数器
j=0;
for(i=0;i if(a[i]==a[i+1])//如果当前数与下一个相同,计数器count加1,否则对数字b进行填充 { count++; continue; } else { b[j++]=count; b[j++]=a[i]; count=1; } } t=j; display(b,t); arraycopy(a,b,t); flag--; } return0; } voidarraycopy(int*a,int*b,intt){//拷贝数组, for(inti=0;i a[i]=b[i]; } voiddisplay(int*aa,intn){//将数组打印出来 for(intk=0;k cout< cout< } 2、买鞋,鸡兔同笼 1.【卖鞋问题】王师傅是卖鞋的,一双鞋进价m元卖n元,假节日打k折,顾客来买鞋给了张100元,王师傅没零钱,于是找邻居换了100元。 事后邻居发现钱是假的,王师傅又赔了邻居100元。 请问王师傅一共亏了多少? (说明m和n均小于100) 解题思路: 计算出支出与收入,支出减去收入就是王师傅亏的钱。 代码: #include usingnamespacestd; intmain(){ intm,n,k,result; cout<<"inputthepurchasepricem: "< cin>>m; cout<<"inputthepricen: "< cin>>n; cout<<"inputthediscountk: "< cin>>k; if((m<=100)&&(n<=100)&&(k>0&&k<=1)){ result=-(100+m-k*n);//计算出亏损的钱 cout<<"wangearns"< } else cout<<"inputerror"; return0; } 2.【鸡兔同笼】今有鸡、兔若干,它们共有a个头和b只脚,问鸡兔各多少? 解题思路: 输入头的数目为a,脚的数目为b Rabbit=b/2-a; Chicken=a-rabbit; 代码: #include usingnamespacestd; intmain(){ inta,b,rabbit,chicken; cout<<"inputthenumberofhead: "< cin>>a; cout<<"inputthenumberoffoot: "< cin>>b; if((b>=2*a)&&(b%2==0)){//判断输入是否合法 rabbit=b/2-a; chicken=a-rabbit; cout<<"thenumberofrabitis: "< cout<<"thenumberofchickenis: "< } else cout<<"inputerror"< return0; } 三、 1.假定一副新扑克牌的顺序为: 大王、小王、黑桃A,2,3,…,T,J,Q,K、红心A,2,3,…,T,J,Q,K、方块A,2,3,…,T,J,Q,K、梅花A,2,3,…,T,J,Q,K。 现将两副扑克牌摞放在一起,然后将最上面的一张牌舍去,将之后的一张牌移到整副牌的最下面,重复此过程。 问: 最后剩下的是哪张牌? 解题思路: 将每次抛弃的数进行标记,未标记的数进行下一轮筛选 代码: #include #defineN108 intmain() { inti,j,k,flag,c,b; inta[N]; for(i=0;i<108;i++){ a[i]=i; printf("%d",a[i]); } printf("\n"); flag=1; k=1; i=0; while (1){ if(a[i]! =0){ if(flag==1){ a[i]=0; flag=0; i=(i+1)%108; } else{ printf("%d",a[i]); i=(i+1)%108; flag=1; } } else i=(i+1)%108; k=0; for(j=1;j<=108;j++){ if(a[j]! =0){ k++; } } if(k==1) break; } return0; } 2.随机发牌: 去掉大小王,发给4个人,每人发13张,要求分四行,并按花色和牌点排序。 样例: SAK9 HKT9876 DQ32 CJ。 解题思路: facetonum将用数字代表的每张牌转换成标准扑克牌的形式 intcompare(constvoid*elem1,constvoid*elem2)比较扑克牌大小 voidfillDeck(Card*wDeck,charwFace[],charwSuit[]){ 填充数组 Shuffle进行洗牌,用产生随机数来洗牌 代码: #include #include #include structcard{ charsuit;//花色 charface;//面值 };//牌的结构体 typedefstructcardCard;//结构体重命名 //将面值及花色转换为相应的数值便于排序 intfacetonum(chara){ //花色的转换 if(a=='\006')return23;//黑桃 if(a=='\003')return22;//红桃 if(a=='\004')return21;//方块 if(a=='\005')return20;//梅花 //面值的转换 if(a=='A')return14; if(a=='T')return10; if(a=='J')return11; if(a=='Q')return12; if(a=='K')return13; returna-'0'; } //比较牌大小的函数 intcompare(constvoid*elem1,constvoid*elem2){ Card*elem1t=(Card*)elem1; Card*elem2t=(Card*)elem2; //先从花色判断大小 if(facetonum(elem1t->suit)>facetonum(elem2t->suit))return-1; if(facetonum(elem1t->suit) //花色相同由面值决定大小 returnfacetonum(elem1t->face)>facetonum(elem2t->face)? -1: 1; } //填充面值及花色 voidfillDeck(Card*wDeck,charwFace[],charwSuit[]){ inti; for(i=0;i<52;i++){ wDeck[i].face=wFace[i%13];//面值13张轮换一次 wDeck[i].suit=wSuit[i/13];//每种花色是13张 } } //洗牌 voidshuffle(Card*wDeck){ inti,j; Cardtemp;//用于交换的中间牌 srand(time(NULL)); for(i=0;i<52;i++) { j=rand()%52;//产生0-51的随机数 //将当前牌与j位置的牌交换 temp.suit=wDeck[i].suit; temp.face=wDeck[i].face; wDeck[i].suit=wDeck[j].suit; wDeck[i].face=wDeck[j].face; wDeck[j].suit=temp.suit; wDeck[j].face=temp.face; } } //发牌 voiddeal(Card*wDeck){ inti; printf("\n\n"); for(i=0;i<52;i++) printf("%c%c%c",wDeck[i].suit,wDeck[i].face, (i+1)%13==0? '\n': '');//13牌为一组 } intmain(){ Carddeck[52]; //面值数组 charface[]={'A','K','Q','J','T','9','8','7','6','5','4','3','2'}; //花色数组 charsuit[]={'\006','\003','\004','\005'}; fillDeck(deck,face,suit); shuffle(deck);//对每一手牌进行排序 qsort(deck,13,sizeof(deck[0]),compare); qsort(deck+13,13,sizeof(deck[0]),compare); qsort(deck+26,13,sizeof(deck[0]),compare); qsort(deck+39,13,sizeof(deck[0]),compare); deal(deck); return0; } 四、12球问题 12球称重问题,有十二个乒乓球特征相同,其中只有一个重量异常,现在要求用一部没有砝码的天平来将坏球找出。 解题思路: 分组编号: A: 1、2、3、4B: 5、6、7、8C: 9、10、11、12 第一次称A和B 1.等重,则坏球在C。 再取123与9,10,11比较 (1)等重,则坏球为12,再比较1和12可知轻重 (2)123>9,10,11,12,比较9,10,若等重则坏球为11且为轻球。 不等重则较轻球为坏球。 (3)123<9,10,11,12,比较9,10,等重则坏球为11且为重球。 不等重则较重球为坏球。 2、A>B 将123456789分三组123,456,789 称456和789 456=789时,坏球在123中且为重球。 再比较1和2即可。 456<789时,4重或78轻,再比较7,和8即可得坏球 456>789时,则56轻。 再比较5和6即可 3、A 分三组 先比较456和789 456=789时,123轻,比较1和2 456>789时,56重,比较5和6 456<789时,4轻或78重,比较7和8. 代码: #include #include #include #include #definestandard1 usingnamespacestd; inta[12]; intrandom(){//产生随机数, intz; srand((int)time(NULL)); z=rand()%11; returnz; } intsum(intx,inty){//求出从编号x到编号y的球的重量和。 inti,z=0; x=x-1; for(i=x;i z=z+a[i]; returnz; } intmain(){ intunstandard; intnum; intjudge; intcount=1; cout<<"theballsnumberisfrom1to12,inputtheweightofballs."< cout<<"inputtheunstandardball'sweight,0islight,2isheavy."< while(judge){ cin>>unstandard; if(unstandard==0||unstandard==2) judge=0; else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 问题 求解 作业