c语言编程题,大神们帮帮忙啦

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个回答  2017-03-23

您好,第1题如下:

#include <stdio.h>
int fun(int n)
{
int count=1;
while(n>1)
  {
    if(n%2==0)
      n/=2;
else
     n=3*n+1;
    count++;
  }
  return count;
}
main()
{
  int t,i,j,max,m,n;
  while(scanf("%d%d",&i,&j)!=EOF)
  { 
    max=0;
    m=i;
    n=j;
    if(i>j)
    {
      t=i;
      i=j;
      j=t;
    } 
    for(t=i;t<=j;t++)
    {
      if(fun(t)>max)
        max=fun(t);
    }
    printf("%d %d %d\n",m,n,max);
  }
}

本回答被网友采纳
第2个回答  2017-03-23
10bit 不能改成 8 bit, 除非拆成两个
第3个回答  2017-03-23
#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  while(true)
  {
    printf("%d\t",n);
    if(n==1)break;
    if(n%2==0)
      n=n/2;
    else
      n=3*n+1;  
  }
  printf("\n");
   return 0;
    
}

相似回答