- 有序序列合并
示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
复制
输出:
1 2 3 7 8 9 10 17 22 33 44
思路:挨个比,小的存入第三个数组,注意:在下面代码中,a或b某个长度已经走完了的时候,应该从for循环用break退出
#include<stdio.h>
// 在res的范围内,如果i1,i2长度某个已经完了,加break退出
int main()
{
int a[1000] = { 0 };
int b[1000] = { 0 };
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
//printf("接收的n和m是:%d %d\n", n, m);
// int数组不考虑\n
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
// 去掉换行\n
for (int i = 0; i < m; i++)
{
scanf("%d", &b[i]);
}
// printf("其中一个:\n");
int res[1000];
int len1 = 0;
int len2 = 0;
int i = 0;
for (i = 0; i <= n + m - 1; i++)
{
if (len1 <= n - 1 && len2 <= m - 1)
{
if (a[len1] <= b[len2])
{
res[i] = a[len1++];
}
else
{
res[i] = b[len2++];
}
}
else { break; }
}
// 看谁有剩余
while (len1 <= n - 1)
{
res[i++] = a[len1++];
}
while (len2 <= m - 1)
{
res[i++] = b[len2++];
}
//printf("\n排序完结果是\n");
for (i = 0;i<=n+m-1; i++)
{
printf("%d ", res[i]);
}
return 0;
}
小乐乐改数字
分析:题目让做的是:把一个数字的每一位取出,且判断,符合不同情况,转为不同值,最后再放回原位。
思路(做法):从最低位开始,加入判断,依次往高位累加,核心代码是:
ret += w*pow(w, i++);
int main()
{
long int a = 0;
scanf("%d", &a);
int t = a;
// 从低位一直往上累加
int ret = 0;
int i = 0;
while (t)
{
// 最低位
int w = t % 10;
t = t / 10;
//
if (w % 2 == 0) { w = 0; }
else { w = 1; }
ret += w * pow(10, i++);
}
printf("%d", ret);
return 0;
}
BC60-带空格直角三角形图案
记下:不断接收n,直到不输入
while(scanf(“%d”, &n)!=EOF)
#include<stdio.h>
int main()
{
int n;
while( scanf("%d", &n)!= EOF)
{
for (int i = 0;i<n;i++)
{
for (int j = 0; j <n - i - 1; j++)
{
printf(" ");
}
for (int j = n - i-1; j < n; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}