心得体会
今天编写了很有意思的demo^^,用自己编的demo玩游戏是一件很享受的事情,如果有一天,我真的能完全靠自己编出属于我自己的demo,那就好了,感觉自己对编程越来越感兴趣。虽然编程有时候真的是枯燥的无味的,有时候几个小时甚至一整天待在电脑前,看着那一长串的代码,会让人很疲惫,但若是自己能够编出很有意思的东西,也是很有成就感的。今天主要学了数组,我不是很擅长数组,但其实我更怕接下来的指针,因为比起指针,可能我数组已经算好了...
技术
- 约瑟夫环游戏(用数组编写)
- 数字游戏
- 冒泡排序
- 选择排序
- 插入排序
操作以及操作详解
- 约瑟夫死亡游戏(用数组编写)
终端输入参与的人数
依次从1开始编号
大家围成一圈
输入死亡编号
凡是报道3的人都死亡 后面的继续数数
输出最后一个活着的人编号
1.算法一:
#include "stdafx.h"
#include"iostream"
#include <stdio.h>
#define KILED -1 //宏定义KILED为-1,死的人的编号改为为-1
int _tmain(int argc, _TCHAR* argv[])
{ int m=0,n=0;//m为参与人数 ,n为死亡编号
int i=0;
int num[10]={};
int count=0;//计数器
int killedNumber=0;//死亡人数
printf("请输入参与人数:");
scanf_s("%d",&m);
//给数组编号
for(i=0;i<m;i++){
num[i]=i+1;
}
printf("请输入死亡编号:");
scanf_s("%d",&n);
//开始游戏
for(i=0;i<m;i++){
if(num[i]!=KILED){
count++;
}
//判断当前编号是不是 **死亡编号**
if(count==n){
num[i]=-1;
count=0;
killedNumber++;
if(killedNumber==m-1){
break;
}
}
if(i==m-1){//让i回到起始点
i=-1;
}
}
printf("\n");
for(i=0;i<m;i++){
printf(" %d ",num[i]);
}
system("pause");
return 0;
}

2、算法二
#include <iostream>
#include <stdio.h>
#define N 1000000
int flag[N]={0};
int main(int argc, char *argv[])
{ int m=0,n=0;//a为最开始参与游戏的人数,n为死亡编号
printf("请输入参与人数:");
scanf("%d",&m);
printf("请输入死亡编号:");
scanf("%d",&n);
int num=0;//计数器
int count=0;//死亡人数
int i=0;
for( i=1;i<=m;i++) {
flag[i]=1;
}
while (count<m-1){
for(i=1;i<=m;i++){
if(1==flag[i]){
num++;
if(num==n){
printf("第%d个死亡的编号为%d\n",(count+1),i);
count++;
flag[i]=0;
num=0;
}
if(count==m-1){
break;
}
}
}
}
for(i=1;i<=m;i++){
if(1==flag[i]){
printf("\nthe last alive is %d\n",i);
}
}
system("pause");
return 0;
}
算法二中使用了变量flag
flag=1;正在执行
flag=0;没有执行

- 数字游戏
猜数字
随机从0-9中产生4个不相同的数字,从小到大排序
1 2 3 4
玩家开始输入
1 4 5 6
如果位置正确且数字正确用A输出
如果数字正确且数字不正确用B输出
1A1B
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main(int argc, char *argv[])
{
int originArray[4]={};// 保存原始数据
int guessArray[4]={};
int countA=0;
int countB=0;
//随机产生0-9中4个不重复的数字
srand((unsigned int )time(NULL));//产生随机种子
for(int i=0;i<4;i++){
bool isExist=false;
int temp=0;//temp为随机产生的数
while(1){
temp=rand()%10; //输入一个随机数
for(int j=0;j<i;j++){
if(originArray[j]==temp){
isExist=true;
break;
}
}
if(isExist==false){
break;
}
}
//将随机产生的数字从大到小排序,用插入排序法
int j=0;
for(;j<i;j++){//j对应的数字和产生的数字进行比较
if(temp<originArray[j]){ //如果j对应的数字大于i对应的数字 ,j的内容往后移动,腾出空间
for(int k=i;k>j;k--){
originArray[k]=originArray[k-1];
}
break;
}
}
originArray[j]=temp;
}
//输出
for(int i=0;i<4;i++){
printf(" %d ",originArray[i]) ;
}
//开始游戏
while(1){
printf("请输入猜测的数字:");
for(int i=0;i<4;i++){
scanf("%d",&guessArray[i]) ;
}
//判断用户的输入
for(int i=0;i<4;i++)//控制原始数字,用原始数字依次和输入的四个数字进行比较
{ for( int j=0;j<4;j++)//控制输入
{if(guessArray[j]==originArray[i]){
if(i==j) {
countA++; //数字相同,位置相同
}else{
countB++;//数字相同,位置不同
}
}
}
}
if(countA==4){//全对
printf("Congratulation!!!");
break;
}else{
printf("%dA%dB \n",countA,countB) ;
//还原数据
countA=0;
countB=0;
}
}
system("pause");
return 0;
}
运行效果

通过一次排序 最大的沉底
#include "stdafx.h"
#include "iostream"
//1.冒泡排序:通过一次排序,最大的沉底
int _tmain(int argc, _TCHAR* argv[])
{ int a[]={2,4,8,1,6,9,3,5,7,0};
for(int i=0;i<10;i++){
for(int j=0;j<9-i;j++){
if(a[j+1]<a[j]){
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
for(int j=0;j<10;j++){
printf("%d ",a[j]);
}
system("pause");
return 0;
}
一次取出一个值,默认他是最小的
如果发现比这个数小,就交换
遍历整个数组 ,找到一个最小的
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{ int num[10]={3,1,0,8,7,2,5,4,6,9};
for (int i = 0; i < 9; i++){
//默认这是最小的
//int min = num[i];//3
for (int j = i+1; j < 10; j++){
//控制用min和后面的每一个进行比较
if (num[i] > num[j]){
//j对应的数字比min还小 交换
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
//一次遍历之后找到最小的值min
//num[i] = min;
}
for(int j=0;j<10;j++){
printf("%d ",num[j]);
}
system("pause");
return 0;
}
每次从未排好的序列中选出第一个元素插入到已排好的序列中
1.从未排好的序列中拿出首元素,并把它赋值给temp变量;
2.从排好的序列中,依次与temp进行比较,如果元素比temp大,则将元
素后移(实际上放置temp的元素位置已经空出)
3.直到找到一个元素比temp小, 将temp放入该位置;
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{ int num[10]={3,1,0,8,7,2,5,4,6,9};
//插入排序
for (int i = 0; i < 10; i++) {
//让i和i+1比较大小
if (num[i] > num[i+1]) {
//交换值
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//让num[i]和前面的所有进行比较
for (int j = i; j > 0; j--){
if (num[j] < num[j-1]) {
temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}
for (int i = 0; i < 10; i++) {
printf("%d ", num[i]);
}
printf("\n");
system("pause");
return 0;
}
运行效果

- ps
数组优点:访问方便
数组缺点:插入和删除效率不高
^^所以使用数组时应尽量避免插入和删除
网友评论