目录
实验7-2-9 螺旋方阵
//怎么做呢
//慢慢找规律
//第一行:1--N
//第二行:4N-4--4N-1
//整个矩阵加上下左右四个边框,沿着上右下左的顺序在边框上输入
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int N;
scanf("%d",&N);
int a[N][N];
int num=1;
int left,down;
int up=left=0,right=down=N-1;
while(num<=N*N){
for(int i=left;i<=right;i++){//第一个圈,从上面开始,从左到右
a[up][i]=num;
num++;
}
up++;
for(int i=up;i<=down;i++){//第一个圈,右边,从上到下
a[i][right]=num;
num++;
}
right--;
for(int i=right;i>=left;i--){//第一个圈,下边,从右到左
a[down][i]=num;
num++;
}
down--;
for(int i=down;i>=up;i--){//第一个圈,左边,从下到上
a[i][left]=num;
num++;
}
left++;
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
实验7-2-10 简易连连看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int N;
scanf("%d\n",&N);//一定要有这个换行,不然会被当成字符读入
char a[8][8];
for(int i=0;i<2*N;i++){
for(int j=0;j<2*N;j++){
scanf("%c ",&a[i][j]);
}
}
//二维字符串的初始化
int K;
scanf("%d",&K);
int cnt=1;
int x1,x2,y1,y2;
int sum=0;
int xiao=0;
haha:
while(cnt<=K){
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
cnt++;
x1--;
x2--;
y1--;
y2--;
if(a[x1][y1]==a[x2][y2]&&xiao==2*N*N-1){
printf("Congratulations!");
break;
}
if(a[x1][y1]==a[x2][y2]&&a[x1][y1]!='*'){
xiao++;
a[x1][y1]='*';
a[x2][y2]='*';
for(int i=0;i<2*N;i++){
for(int j=0;j<2*N;j++){
if(j<2*N-1){
printf("%c ",a[i][j]);
}else{
printf("%c",a[i][j]);
}
}
printf("\n");
}
}else{
printf("Uh-oh\n");
sum++;
}
if(sum==3){
printf("Game Over\n");
break;
}
for(int i=0;i<2*N;i++){
for(int j=0;j<2*N;j++){
if(a[i][j]!='*'){
goto haha;
}
}
}
}
return 0;
}
实验7-3-5 凯撒密码
//1.只有字母需要移位
//2.大写字母:65-90 ,a[i]=(a[i]-65+offset)%26+65
//3.小写字母:97-122, a[i]=(a[i]-97+offset)%26+97
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char a[81]=" ";//字符串初始化
/*char c;
scanf("%c",&c);
int i=0;
while(c!='\n'){
a[i]=c;
i++;
scanf("%c",&c);
}*/
gets(a);
int n=strlen(a);
int offset;
scanf("%d",&offset);
offset=offset%26;
//负数的取余是计算不出来的
for(int i=0;i<n;i++){
if(a[i]>='A'&&a[i]<='Z'){
int wei=(a[i]-65+offset);
if(wei<0){
wei=wei+26;
}
a[i]=wei%26+65;
}else if(a[i]>='a'&&a[i]<='z'){
int wei=((a[i]-97+offset));
if(wei<0){
wei=wei+26;
}
a[i]=wei%26+97;
}
}
printf("%s",a);
return 0;
}
实验7-3-6 字符串转换成十进制整数
//十六进制:0-9,a,b,c,d,e,f
//+-P-xf4+-1!#
//-f41
//=1+4*16+15*16*16=3905
//'0'=48
//只保留第一个遇见的x或者X后面的0-9,a,b,c,d,e,f
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char ch;
int sum=0,flag=1,isAppear=0;
ch=getchar();
while(ch!='#'){
if(ch=='-'&&!isAppear){
flag=-1;
}else if(ch>='a'&&ch<='f'||ch>='A'&&ch<='F'||ch>='0'&&ch<='9'){
isAppear=1;
if(ch>='a'&&ch<='f'){
sum=sum*16+ch-'a'+10;
}else if(ch>='A'&&ch<='F'){
sum=sum*16+ch-'A'+10;
}else if(ch>='0'&&ch<='9')
sum=sum*16+ch-'0';
}
ch=getchar();
}
printf("%d",flag*sum);
return 0;
}
实验7-3-7 字符转换
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char ch;
ch=getchar();
int flag=0;
int len=0;
while(ch!='\n'){
if(flag==0){
if(ch>'0'&&ch<='9'){
flag=1;
printf("%c",ch);
len++;
}
}else{
if(ch>='0'&&ch<='9'){
printf("%c",ch);
len++;
}
}
ch=getchar();
}
if(len==0){
printf("0");
}
return 0;
}
实验7-3-9 删除重复字符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int cmp(const void* a,const void* b){
return *(char*)a-*(char*)b;
}
int main(){
char str[81]="";
char out[81]="";
gets(str);
int n=strlen(str);
qsort(str,n,sizeof(char),cmp);
int j=0;
out[j++]=str[0];
for(int i=1;i<n;i++){
int flag=1;
if(str[i]!=str[i-1]){
out[j++]=str[i];
}
}
printf("%s",out);
return 0;
}