前言:
1 第一个问题的主要内容是对循环知识的一个复习,其次是希望大家能够掌握打印图形的规律。
2 后面三个问题主要跟二元数组有关,有一定的方法技巧,大家慢慢看详解,应该会明白。
下面请看题:
//根据规律做题,不知道大家发现没有,先看正对角线,发现行列相等,副对角线行加列等于4
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//打印图形X
int main()
{
int i = 0;//行
int j = 0;//列
int n = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j || (i + j) == n - 1)
{
printf("*");
}
else
printf(" ");
}
printf("\n");
}
return 0;
}
看看运行结果:
下面看代码:
//还是找规律
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//打印图形X
int main()
{
int i = 0;//行
int j = 0;//列
int n = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i==0||j==0||j==n-1||i==n-1)//这个是规律的核心
{
printf("* ");
}
else
printf(" ");
}
printf("\n");
}
return 0;
}
2 矩阵转置
int main()
{
int n = 0;//行
int m = 0;//列
scanf("%d%d", &n, &m);
int i = 0;
int j = 0;
int arr[10][10] = { 0 };
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
scanf("%d", &arr[i][j]);
}
for (i = 0; i< m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ",arr[j][i]);
}
printf("\n");
}
return 0;
}
3 逆序输出
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
for (i = 9; i >= 0; i--)
printf("%d ", arr[i]);
return 0;
}
3 交换数组
#include <stdio.h>
int main()
{
int arr1[10] = {0};
int arr2[10] = {0};
int i = 0;
printf("请输入10个数字:>");
for(i=0; i<10; i++)
{
scanf("%d", &arr1[i]);
}
printf("请输入10个数字:>");
for(i=0; i<10; i++)
{
scanf("%d", &arr2[i]);
}
//交换
for(i=0; i<10; i++)
{
int tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
return 0;
}
4 有序序列合并
法一:冒泡排序(这里不建议用,虽然能做出来,但是这有点像套用公式的做法,有点古板,个人感觉)
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d%d", &n, &m);
int i = 0;
int j = 0;
int arr[10000] = { 0 };
for (; i < n+m; i++)
{
scanf("%d", &j);
arr[i] = j;
}
for (i = 0; i < n + m; i++)
{
for (j = 0; j < n + m -1 - i; j++)
{
if (arr[j] > arr[j+ 1])
{
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
for (i = 0; i < n + m; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
法二(比较难想,不失为一种好方法,应该少数人能想到):
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr1[1000] = {0};
int arr2[1000] = {0};
//输入
scanf("%d %d", &n, &m);
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr1[i]);
}
for(i=0; i<m; i++)
{
scanf("%d", &arr2[i]);
}
//处理
int j = 0;
i = 0;
while(i<n && j<m)
{
if(arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
if(i == n)
{
for(; j<m; j++)
{
printf("%d ", arr2[j]);
}
}
else
{
for(; i<n; i++)
{
printf("%d ", arr1[i]);
}
}
return 0;
}
今天的内容就讲解完毕了,留下了一道比较有意思的题目,大家可以看看,答案附在后面(用到的知识点都是前面学的,不含后面的知识点,到这里我相信大家一定看的懂答案的,这个答案的代码还是有许多优化空间的,大家可以自己试着先做一下,再看答案的思路,最后优化一下答案的代码和自己的代码)
#include<stdio.h>
int main()
{
int l = 0;
int r = 0;
scanf("%d%d", &l, &r);
int i = 0;
int x = 1;
int y = 0;
int m = 0;
int count0 = 0;
int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = 0;
int count6 = 0;
int count7 = 0;
int count8 = 0;
int count9 = 0;
int max = 0;
int n = 0;
for (i = l; i <= r; i++)
{
m = i;
if (i == 0)
{
count0++;
}
if (m % 10 == 0&&m!=0)
{
count1++;
count0++;
while (m /= 10)
{
if (m != 1)
count0++;
}
}
m = i;
while (m!= 0&&i!=0&&m%10!=0)
{
x = m % 10;
m /= 10;
switch (x)
{
case 0:
count0++;
break;
case 1:
count1++;
break;
case 2:
count2++;
break;
case 3:
count3++;
break;
case 4:
count4++;
break;
case 5:
count5++;
break;
case 6:
count6++;
break;
case 7:
count7++;
break;
case 8:
count8++;
break;
case 9:
count9++;
break;
}
}
}
int arr[10] = { count0, count1, count2, count3, count4, count5, count6, count7, count8, count9 };
max = arr[0];
for (y = 0; y <= 9; y++)
{
if (max < arr[y])
max = arr[y];
}
if (max == count0)
n = 0;
if (max == count1)
n = 1;
if (max == count2)
n = 2;
if (max == count3)
n = 3;
if (max == count4)
n = 4;
if (max == count5)
n = 5;
if (max == count6)
n = 6;
if (max == count7)
n = 7;
if (max == count8)
n = 8;
if (max == count9)
n = 9;
printf("%d %d", n, max);
return 0;
}