//5-1单纯记忆训练,记忆4位数
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_STAGE 10 //关卡数
int sleep(unsigned long x){
clock_t c1 = clock(), c2;
do{
if((c2 = clock()) == (clock_t)-1)
return 0;
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(){
int stage;
int success = 0;
clock_t start, end;
printf("来记忆一个4位数吧。\n");
start = clock();
for(stage = 0; stage < MAX_STAGE; stage++){
int x; //已读取的值
int no = rand() % 9000 + 1000; //需要记忆的数
printf("%d", no);
fflush(stdout);
sleep(500); //问题只提示0.5秒
printf("\r请输入:");
fflush(stdout);
scanf("%d", &x);
if(x != no)
printf("\a回答错误。\n");
else{
printf("回答正确。\n");
success++;
}
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
//5-2单纯记忆训练,玩家自定义数值位数
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_STAGE 10 //关卡数
#define LEVEL_MIN 3 //最低等级(位数)
#define LEVEL_MAX 20 //最高等级(位数)
int sleep(unsigned long x){
clock_t c1 = clock(), c2;
do{
if((c2 = clock()) == (clock_t)-1)
return 0;
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(){
int i, stage;
int level;
int success = 0;
clock_t start, end;
srand(time(NULL));
printf("数值记忆训练\n");
do{
printf("要挑战的等级(%d~%d):", LEVEL_MIN, LEVEL_MAX);
scanf("%d", &level);
}while(level < LEVEL_MIN || level > LEVEL_MAX);
printf("来记忆一个%d位数吧。\n", level);
start = clock();
for(stage = 0; stage < MAX_STAGE; stage++){
char no[LEVEL_MAX + 1]; //需要记忆的数字串
char x[LEVEL_MIN * 2]; //已读取的数字串
//因为rand()生成的随机数不会超过5位及以上,所以用字符串来处理
no[0] = '1' + rand() % 9; //开头是1-9
for(i = 1; i < level; i++)
no[i] = '0' + rand() % 10; //之后是0-9
no[level] = '\0';
printf("%s", no);
fflush(stdout);
sleep(125 * level); //问题只提示125 * level 毫秒
printf("\r%*s\r请输入:", level, "");
scanf("%s", x);
if(strcmp(no, x) != 0)
printf("\a回答错误。\n");
else{
printf("回答正确。\n");
success++;
}
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
//5-3单纯记忆训练,大写字母
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_STAGE 10 //关卡数
#define LEVEL_MIN 3 //最低等级(位数)
#define LEVEL_MAX 20 //最高等级(位数)
int sleep(unsigned long x){
clock_t c1 = clock(), c2;
do{
if((c2 = clock()) == (clock_t)-1)
return 0;
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(){
int i, stage;
int level;
int success = 0;
clock_t start, end;
const char ltr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
srand(time(NULL));
printf("英文字母记忆训练\n");
do{
printf("要挑战的等级(%d~%d):", LEVEL_MIN, LEVEL_MAX);
scanf("%d", &level);
}while(level < LEVEL_MIN || level > LEVEL_MAX);
printf("来记忆%d个英文字母吧。\n", level);
start = clock();
for(stage = 0; stage < MAX_STAGE; stage++){
char mstr[LEVEL_MAX + 1]; //需要记忆的一串英文字母
char x[LEVEL_MAX * 2]; //读取到的英文字母
for(i = 0; i < level; i++) //生成作为题目的字符串
mstr[i] = ltr[rand() % strlen(ltr)];
mstr[level] = '\0';
printf("%s", mstr);
fflush(stdout);
sleep(125 * level);
printf("\r%*s\r请输入:", level, "");
fflush(stdout);
scanf("%s", x);
if(strcmp(x, mstr) != 0)
printf("\a回答错误。\n");
else{
printf("回答正确。\n");
success++;
}
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
//5-4单纯记忆训练,大写和小写字母
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_STAGE 10 //关卡数
#define LEVEL_MIN 3 //最低等级(位数)
#define LEVEL_MAX 20 //最高等级(位数)
int sleep(unsigned long x){
clock_t c1 = clock(), c2;
do{
if((c2 = clock()) == (clock_t)-1)
return 0;
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(){
int i, stage;
int level;
int success = 0;
clock_t start, end;
const char ltr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"; //仅仅此处和5-3不同
srand(time(NULL));
printf("英文字母记忆训练\n");
do{
printf("要挑战的等级(%d~%d):", LEVEL_MIN, LEVEL_MAX);
scanf("%d", &level);
}while(level < LEVEL_MIN || level > LEVEL_MAX);
printf("来记忆%d个英文字母吧。\n", level);
start = clock();
for(stage = 0; stage < MAX_STAGE; stage++){
char mstr[LEVEL_MAX + 1]; //需要记忆的一串英文字母
char x[LEVEL_MAX * 2]; //读取到的英文字母
for(i = 0; i < level; i++) //生成作为题目的字符串
mstr[i] = ltr[rand() % strlen(ltr)];
mstr[level] = '\0';
printf("%s", mstr);
fflush(stdout);
sleep(125 * level);
printf("\r%*s\r请输入:", level, "");
fflush(stdout);
scanf("%s", x);
if(strcmp(x, mstr) != 0)
printf("\a回答错误。\n");
else{
printf("回答正确。\n");
success++;
}
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
//5-5加一训练,记忆多个数值并输入这些数值加1后的值
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_STAGE 10 //关卡数
#define LEVEL_MIN 2 //最低等级(位数)
#define LEVEL_MAX 6 //最高等级(位数)
int sleep(unsigned long x){
clock_t c1 = clock(), c2;
do{
if((c2 = clock()) == (clock_t)-1)
return 0;
}while(1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(){
int i, stage;
int level;
int success = 0;
int score[MAX_STAGE]; //所有关卡的答对数量
clock_t start, end;
srand(time(NULL));
printf("加一训练开始\n");
printf("来记忆2位的数值\n");
printf("请输入原数值加1后的数值\n");
do{
printf("要挑战的等级(%d~%d):", LEVEL_MIN, LEVEL_MAX);
scanf("%d", &level);
}while(level < LEVEL_MIN || level > LEVEL_MAX);
start = clock();
for(stage = 0; stage < MAX_STAGE; stage++){
int no[LEVEL_MAX]; //要记忆的数
int x[LEVEL_MAX]; //已读取的值
int seikai = 0; //本关卡的答对数量
printf("\n第%d关卡开始!!\n", stage + 1);
for(i = 0; i < level; i++){ //生成level个两位数
no[i] = rand() % 90 + 10;
printf("%d ", no[i]);
}
fflush(stdout);
sleep(300 * level);
printf("\r%*s\r", 3 * level, "");
fflush(stdout);
for(i = 0; i < level; i++){ //读取答案
printf("第%d个数:", i + 1);
scanf("%d", &x[i]);
}
for(i = 0; i < level; i++){ //判断对错并显示
if(x[i] != no[i] + 1)
printf("X ");
else {
printf("O ");
seikai++;
}
}
putchar('\n');
for(i = 0; i < level; i++) //显示正确答案
printf("%2d", no[i]);
printf(" ... 答对了%d个。\n", seikai);
score[stage] = seikai;
success += seikai;
}
end = clock();
printf("%d次中答对了%d次。\n", MAX_STAGE, success);
for(stage = 0; stage < MAX_STAGE; stage++)
printf("第%2d关卡:%d\n", stage + 1, score[stage]);
printf("用时%.1f秒。\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
//5-9读取想要的数,把最后10个存入元素个数为10的数组
#include<stdio.h>
#define MAX 10
int main(){
int i;
int a[MAX];
int cnt = 0; //读取到的个数
int retry;
printf("请输入整数。\n");
do{
if(cnt >= MAX){
for(i = 0; i < MAX - 1; i++) //把a[1]到a[MAX - 1]往前移动一个位置
a[i] = a[i + 1];
}
printf("第%d个整数:", cnt + 1);
scanf("%d", &a[cnt < MAX ? cnt : MAX - 1]);
cnt++;
printf("是否继续?(Yes...1/No...0): ");
scanf("%d", &retry);
}while(retry == 1);
if(cnt <= MAX)
for(i = 0; i < cnt; i++)
printf("第%2d个:%d\n", i + 1, a[i]);
else
for(i = 0; i < MAX; i++)
printf("第%2d个:%d\n", cnt - MAX + 1 + i, a[i]);
return 0;
}
//5-10读取想要的数,把最后10个存入元素个数为10的数组,不移动元素
#include<stdio.h>
#define MAX 10
int main(){
int i;
int a[MAX];
int cnt = 0;
int retry;
printf("请输入整数。\n");
do{
printf("第%d个整数:", cnt + 1);
scanf("%d", &a[cnt++ % MAX]);
printf("是否继续?(Yes...1/No...0): ");
scanf("%d", &retry);
}while(retry == 1);
i = cnt - MAX;
if(i < 0) i = 0;
for(; i < cnt; i++)
printf("第%2d个:%d\n", i + 1, a[i % MAX]);
return 0;
}