c语言编程题,大神们帮帮忙啦1.考虑如下生成的序列:从整数n开始,若n为偶数,则将其除以2;若n为奇数,则将其乘以3后加1。用得到的数重复以上步骤,直到n=1为止。例如,n=22时,序列为22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1。
对给定的n,整个序列的数的个数称为n的循环节长度。上例中22的循环节长度为16。要求:输入两个整数i和j,计算两个数之间的所有整数中(包括i和j),循环节长度的最大值。
输入:每行包括两个整数。所有整数大于0,小于1000000.
输出:按输入顺序输出两个整数以及循环节长度的最大值,以空格隔开。
示例:
Input Output
1 10 1 10 20
100 200 100 200 125
900 1000 900 1000 174
2.蛇形矩阵是由1 开始的自然数依次排列成的一个矩阵上三角形。
要求:
数据输入有多组数据,每组数据由一个正整数N 组成。(N不大于100)。对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
【样例输入】
5
【样例输出】
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
3.输出7 和7 的倍数,还有包含7 的数字例如(17,27,37...70,71,72,73...)。
要求:输入一个整数N。(N 不大于30000);输出从小到大排列的不大于N 的与7 有关的数字,每行一个。
【样例输入】
20
【样例输出】
7
14
17
/* 第3题 */
#include
int main(void)
{
unsigned N;
unsigned i;
/* 临时变量 */
unsigned temp;
printf("请输入N的值:\n");
while (scanf("%u", &N) != 1 || N 7 || N > 30000)
{
printf("输入不合法!\n");
while (getchar() != '\n');
printf("请输入N的值:\n");
}
for (i = 7; i <= N; i++)
{
/* 能被7整除 */
if (i % 7 == 0)
printf("%d\n", i);
/* 不能被7整除 */
else
{
/* 为了不改变i值,用临时变量得到i的副本 */
temp = i;
/* temp不为0 */
while (temp)
{
/* 如果temp的个位数是7,打印当前i值,结束循环 */
if (temp % 10 == 7)
{
printf("%d\n", i);
break;
}
/* 如果在temp的个位数不是7,把temp的个位去掉,把十位作为新的个位继续判断 */
temp /= 10;
/* 如果temp小于10(只有一位),根据整数除法规则,结果是0,循环结束 */
}
}
}
return 0;
}
/* 第2题 */
#include
int main(void)
{
unsigned N;
unsigned i, j;
/* 每一行第一个元素的值 */
unsigned lf;
/* 要打印的元素的值 */
unsigned nxt;
printf("请输入一组数据:\n");
while(scanf("%u", &N) == 1)
{
/* 处理新一组数据时把第一个元素置为1 */
lf = 1;
/* 行号从0开始,列号从1开始 */
for (i = 0; i < N; i++)
{
/* 处理新一行数据时计算该行第一个元素 */
/* 增量是当前行号 */
lf += i;
nxt = lf;
/* 根据行数减少本行要打印的元素个数 */
for (j = 1; j <= N - i; j++)
{
printf("%-2u", nxt);
if (j < N)
{
/* 增量是当前行号与下个列号之和 */
nxt += i + (j + 1);
putchar(' ');
}
}
putchar('\n');
}
}
return 0;
}
/* 第1题 */
#include
/* 函数原型 */
unsigned countRepetends(unsigned);
int main(void)
{
unsigned i, j;
/* 最大循环节长度 */
unsigned max_count = 0;
/* 当前处理的数的循环节长度 */
unsigned current_count;
/* 循环计数器 */
unsigned k;
printf("依次输入i和j的值:\n");
scanf("%u%u", &i, &j);
for (k = i; k max_count)
max_count = current_count;
}
printf("%u %u %u\n", i, j, max_count);
return 0;
}
unsigned countRepetends(unsigned n)
{
unsigned count = 0;
/* 无限循环 */
while (n != 1)
{
if (n % 2)
n = n * 3 + 1;
else
n /= 2;
count++;
}
/* n=1时循环结束,要把1也计入循环节 */
count++;
return count;
}
您好,第1题如下:
#include <stdio.h>