暑假学习打卡【4】——北理工乐学第四周作业

1、【图形】输出一行星号

现在要用最简单得办法,在一行中输出N个星号。

输入:

N值

输出:

一行中N个星号。

int main()  
{  
 int a;//a表示自己输入的数字  
 scanf("%d",&a);  
 int i;//i表示星号数量   
 
 for(i=0;i<a;i++)  
 printf("*");
  
 printf("\n");  
 return 0;   
}  

------------------------------------------------这里是无情的切割线------------------------------------------------------

2、【图形】数字正方型

这是双重循环的入门题目,大家来看看,你会做吗?

输入 n 的值,输出如下例( n=4 )所示的由数字组成的正方型。
  1  2  3  4
  5  6  7  8
  9 10 11 12
 13 14 15 16

输入:
    n

输出:
   数字组成的正方型

#include <stdio.h>  
int main()  
{  
 int n,i,j,m;//n表示输出的数字,i表示行数,j表示列数,m表示每一行第一个数字的大小   
 scanf("%d",&n);  
    m=1;  
 for(i=0;i<n;i++)   
 {  
  for(j=0;j<n;j++)  
  {  
   printf("%3d",m);  
   m++;  
  }  
  printf("\n");  
 }  
 return 0;  
}  

注意这里采用的是右对齐格式~

------------------------------------------------这里是无情的切割线------------------------------------------------------

3、【数列】求最小 m 值

求满足下列不等式的最小 m。

    1 + 2 + 3 + 4 + ...... + m ≥ n

例如:n=100,当 m =14 时,满足:1+2+3+4+...+13=91<100,而 1
+2+3+4+......+14=105>100。

输入:n

输出:m

#include <stdio.h>  
int main()  
{  
    int n = 0;//n表示自己输入的数据  
    int m = 0;//m表示输出的结果  
    int i = 1;  
    int s = 0;//s表示总和  
    scanf("%d", &n);  
    for (i = 1;;i++)  
    {  
        s += i;  
        m++;  
        if (s >= n)  
        {  
            printf("%d\n", m);  
            break;  
        }  
    }  
    return 0;  
}  

------------------------------------------------这里是无情的切割线------------------------------------------------------

4、【中学】寻找阿姆斯特朗数

请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和

例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。

输入:

    正整数的位数n(n<=6)。

输出:

   所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:"No output.”;若存在,则从小到大进行输出。

说明:

假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):

1111
2222
9999

首先是我第一次写这道题的过程,很繁琐⬇

#include <stdio.h>  
int main()  
{  
 int n;//n表示输入的数字位数   
 int i;  
 int min=1;  
 int max=10;  
 scanf("%d",&n);  
 for(i=1;i<n;i++)  
    {  
     min*=10;  
     max*=10;  
 }  
 int x,y,m=0;//y表示各位数的三次方的和  
 int a1;  
 int a2,b2;  
 int a3,b3,c3;  
 int a4,b4,c4,d4;  
 int a5,b5,c5,d5,e5;  
 int a6,b6,c6,d6,e6,f6;  
 switch(n)  
    {  
     case 1:  
      for(x=min;x<max;x++)  
      {  
      a1=x%max;  
      y=a1;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    }   
    else{   
     continue;  
    }  
   }  
   if(m==0)  
   {  
    printf("No output.");  
   }  
   break;  
       
     case 2:  
      for(x=min;x<max;x++)  
      {  
      a2=x/10;b2=x%10;  
      y=a2*a2+b2*b2;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    }   
   else{   
     continue;  
    }  
   }  
   if(m==0)  
   {  
    printf("No output.\n");  
   }  
   break;  
          
          
        case 3:  
      for(x=min;x<max;x++)  
      {  
       a3=x/100;b3=x/10%10;c3=x%10;  
       y=a3*a3*a3+b3*b3*b3+c3*c3*c3;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    continue;  
    }   
   else{   
     continue;  
    }  
   }  
      if(m==0)  
   {  
    printf("No output.");  
   }  
   break;  
     
  case 4:  
      for(x=min;x<max;x++)  
      {  
       a4=x/1000;b4=x/100%10;c4=x%100/10;d4=x%100%10;  
       y=a4*a4*a4*a4+b4*b4*b4*b4+c4*c4*c4*c4+d4*d4*d4*d4;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    continue;  
    }   
   else{   
     continue;  
    }  
   }  
            if(m==0)  
   {  
    printf("No output.");  
   }  
   break;  
     
     
     case 5:  
      for(x=min;x<max;x++)  
      {  
       a5=x/10000;b5=x/1000%10;c5=x%1000/100;d5=x%100/10;e5=x%100%10;  
       y=a5*a5*a5*a5*a5+b5*b5*b5*b5*b5+c5*c5*c5*c5*c5+d5*d5*d5*d5*d5+e5*e5*e5*e5*e5;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    continue;  
    }   
   else{   
     continue;  
    }  
   }  
   if(m==0)  
   {  
    printf("No output.");  
   }  
   break;  
  case 6:  
   for(x=min;x<max;x++)  
   {  
    a6=x/100000;b6=x/10000%10;c6=x/1000%10;d6=x%1000/100;e6=x%100/10;f6=x%10;  
    y=a6*a6*a6*a6*a6*a6+b6*b6*b6*b6*b6*b6+c6*c6*c6*c6*c6*c6+d6*d6*d6*d6*d6*d6+e6*e6*e6*e6*e6*e6+f6*f6*f6*f6*f6*f6;  
      if(x==y)  
   {  
    m=1;  
    printf("%d\n",x);  
    continue;  
    }   
   else{   
     continue;  
    }  
    if(m==0)  
   {  
    printf("No output.");  
   }  
   break;  
   }  
 }  
}  

后面对此进行修改后:

#include <stdio.h>
#include <math.h>
int main()
{
	int n=0;
	scanf("%d",&n);	
	int i=0,min=0,max=0,j=0;//min表示n位数的最小值,max表示n位数的最大值,j表示在min~max区间的n位数 
	int sum=0,sign=0;
	min=pow(10,n-1);
	max=pow(10,n)-1;	
	int arr[7]={0};
	for(j=min;j<=max;j++)
	{
		sum=0;		
		for(i=1;i<=n;i++)
		{
			int x=pow(10,i);
			int y=pow(10,i-1);
			arr[i]=(j%x)/y;   //确定每一位的数字
		}		
		for(i=1;i<=n;i++)
		sum+=pow(arr[i],n);			
		if(sum==j)
		{
			sign=1;
			printf("%d\n",sum);
		}
	}
	if(sign==0)
	printf("No output.\n");
	return 0;
}

------------------------------------------------这里是无情的切割线------------------------------------------------------

5、【日期】再算星期(选做)

再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。

输入:

    年 月 日

输出:

    0~6。
    星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。

假设年份大于1900。先想一想:我们现在只会使用 if 语句,该如何建立数学模型?

#include <stdio.h>  
int main() {  
 int m[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
 int a, b, c, i, j, sum = 0, day = 0, d;  
 scanf("%d %d %d", &a, &b, &c);  
 if ((a % 4 == 0) && (a % 100 != 0) || (a % 400 == 0))  
  m[1] = 29;  
 if ((b > 12) || (b < 1)) {  
  printf("month is error.\n");  
  return 0;  
 } else if ((c > m[b - 1]) || (c <= 0)) {  
  printf("day is error.\n");  
  return 0;  
 } else  
  for (i = 1900; i < a; i++) {  
   if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0))  
    sum = sum + 366;  
   else  
    sum = sum + 365;  
  }  
 for (j = 0; j < (b - 1); j++) {  
  day = day + m [j];  
 }  
 d = ((sum + day + c) % 7) ;  
 printf("%d\n", d);  
 return 0;  
}  

------------------------------------------------这里是无情的切割线------------------------------------------------------

以上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值