"痛苦难以避免,而磨难可以选择。"-->村上春树
作者:Mylvzi
文章主要内容:数据在内存中的存储
目录
1.有序序列判断
题目描述:
分析过程:
代码实现:
2.获得月份天数
题目描述:
分析过程:
代码实现:
3.矩阵相等判定
题目描述:
分析过程:
4.矩阵交换
题目描述:
代码实现:
5.井字棋判断输赢
题目描述:
代码实现:
6.递归进行进制转换
题目描述:
分析过程:
代码实现:
画图理解递归过程:(推出去,再归回来)
#include
int main()
{
//定义个数
int n = 0;
scanf("%d",&n);
//循环输入数字
int arr[n];
int i = 0;
for(i=0; i
//边输入,边判断
int main()
{
//定义个数
int n = 0;
scanf("%d",&n);
//循环输入数字 //判断
int flag1 = 0;//判断升序
int flag2 = 0;//判断降序
int arr[n];
int i = 0;
for(i=0; i=1)//只要输了一个元素之后,输入一个就和前面已经输入的数字进行比较
{
if(arr[i]
/*第一种写法,最直观的*/
#include
int main()
{
int y, m;
while (scanf("%d %d", &y, &m) != EOF)
{
switch (m)
{
//第一种情况
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31\n");
break;
//第二种情况
case 4:
case 6:
case 9:
case 11:
printf("30\n");
break;
//二月的情况 要判断是否是闰年
default:
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
printf("29\n");
else
printf("28\n");
}
}
return 0;
}
/*第二种方法,漂亮的代码*/
#include
//判断是否为闰年
int is_leap_year(int y)
{
if((y%4==0 && y%100!=0 ) || (y%400==0))
return 1;
else
return 0;
}
//获取天数
int get_days_of_month(int y,int m)
{
//使用数组来存放对应的天数
int d = 0;
int day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
d=day[m];
if(m==2)
{
if(is_leap_year(y)==1)
d+=1;
}
return d;
}
int main()
{
//输入年份和月数
int y = 0;
int m = 0;
while(scanf("%d %d",&y,&m)==2)
{
int d = get_days_of_month(y,m);
printf("%d\n",d);
}
return 0;
}
代码实现:(第二种方法要学习)
方法一:
#include
//BC105
//方法一
//判断矩阵是否相等->大小相等,但对应元素未知
int main()
{
//定义矩阵大小
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
//两个矩阵的赋值
int arr1[n][m];
int arr2[n][m];
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr1[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr2[i][j]);
}
}
//判断是否相等
int flag = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (arr1[i][j] != arr2[i][j])
{
flag = 1;
}
}
}
if (1 == flag)
{
printf("No\n");
}
else {
printf("Yes\n");
}
return 0;
}
方法2:(很不错的一个方法)(main函数也是函数,把它看作一个普通的自定义函数,只有一个返回值)
//BC105
//判断矩阵是否相等->大小相等,但对应元素未知
int main()
{
//定义矩阵大小
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
//两个矩阵的赋值
int arr1[n][m];
int arr2[n][m];
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr1[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr2[i][j]);
if (arr2[i][j] != arr1[i][j])
{
printf("No\n");
return 0;
}
}
}
printf("Yes\n");
return 0;
}
//BC106上三角形矩阵判定
int main()
{
//定义方阵大小
int n = 0;
scanf("%d",&n);
//方阵赋值并判断
int arr[n][n];
int i = 0;
int j = 0;
for(i=0; i
#include
//BC108 矩阵交换
int main()
{
//定义矩阵大小
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
//矩阵赋值
int i = 0;
int j = 0;
int arr[n][m];
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
//输入进行变幻的次数
int k = 0;
scanf("%d", &k);
//分三种情况进行操作
int a = 0;//a仅仅是用来循环次数
while (a < k)
{
//先定义要执行的操作
char ope = 0;
//定义具体位置
int x = 0;
int y = 0;
while (getchar() != '\n');
scanf("%c %d %d", &ope, &x, &y);
switch (ope)
{
case 'r'://行操作
for (j = 0; j < m; j++)
{
int temp = arr[x-1][j];
arr[x-1][j] = arr[y-1][j];
arr[y-1][j] = temp;
}
break;
case 'c'://列操作
for (i = 0; i < n; i++)
{
int temp = arr[i][x-1];
arr[i][x-1] = arr[i][y-1];
arr[i][y-1] = temp;
}
break;
default://不进行操作
break;
}
a++;
}
//输出变换后的矩阵
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
#include
//BC110
//判断输赢函数
int is_winner(char arr[3][3], int row, int col)
{
int x = 0;
int y = 0;
char flag = 0;
//row
for (x = 0; x < row; x++)
{
if (arr[x][0] == arr[x][1] && arr[x][1] == arr[x][2] && arr[x][0] == arr[x][2])
flag = arr[x][0];
}
//col
for (y = 0; y < col; y++)
{
if (arr[0][y] == arr[1][y] && arr[1][y] == arr[2][y] && arr[0][y] == arr[2][y])
flag = arr[0][y];
}
//对角线
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] == arr[2][2])
{
flag = arr[0][0];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] == arr[2][0])
{
flag = arr[0][2];
}
return flag;
}
int main()
{
//用二维数组填充棋盘
char arr[3][3];
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%c", &arr[i][j]);
getchar();//处理的是字符,注意要清理缓冲区
}
}
//判断输赢
char ret = is_winner(arr, 3, 3);
if (ret == 'K')
{
printf("KiKi wins!");
}
else if (ret == 'B')
{
printf("BoBo wins!");
}
else
{
printf("No winner!");
}
return 0;
}
总结:使用flag标记这种做法是一种很常见的C语言编程过程中使用到的技巧
#include
//BC111
//直接打印出来
void print(int num)
{
if (num > 5)//保证num<6
{
print(num / 6);
}
printf("%d", num % 6);
}
int main()
{
int num = 0;
scanf("%d", &num);
print(num);
return 0;
}