各种编程题

求10-90的随机数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	srand((unsigned)time(NULL));//随机种子每次都是随机数,rand只有第一次随机下次不变
	int a[50] = { 0 };
	int i,j;
	int max, min;
	for (i = 0;i < 50;i++)
	{
		a[i] = rand() % (99 - 10 + 1) + 10;
		for (j = 0;j < i;j++)//j是i上一个元素
			if(a[j]==a[i])
		{
			i--;
			break;
		}
	}
	printf("50个随机数\n");
	for (i = 0;i < 50;i++)
	{
		printf("  %d", a[i]);
		if ((i + 1) % 10 == 0)
			printf("\n");
	}
	max = 10, min = 99;
	for (i = 0;i < 50;i++)
	{
		if (a[i] < min)
			min = a[i];
		if (a[i] > max)
			max = a[i];
	}
	printf("最大值是%d,最小值是%d", max, min);


}

水仙花

判断100到1000以内有多少水仙花数

#include<stdio.h>
int main()
{
	int i,j,k,l,m;
	for (i = 100;i <= 1000;i++)
	{
		j = i / 100;
		k = i/10 % 10;
		l = i % 10;
		if (i == j * j * j + k * k * k + l * l * l)
			printf("  %d", i);
	}
	printf("\n");

	return 0;
}

四叶玫瑰数

判断1000到10000有多少四叶玫瑰数

#include<stdio.h>
#include<math.h>
#include<string.h>
 
int main()
{
 int i,a,b,c,d,s;
 for(i=1000;i<10000;i++)
 {
 	a = i%10;	
 	b = i/10%10;
 	c = i/100%10;
 	d = i/1000;
 	s = a * a * a*a+ b * b * b*b + c * c * c*c+d*d*d*d;
 	if(i==s)
 	printf(" %d",i);
 }
 
 
 }
 

闰年

能被4整除不能被100整除或能被400整除

#include<stdio.h>
int main()
{
	int year,sum=0;
	for (year = 1000;year <= 2000;year++)
	{
		if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
		{
			printf(" %d", year);
			sum++;
		}
	}
	printf("\n");
	printf("%d", sum);
	return 0;
}

杨辉三角

1
11
121
1331
14641
...

#include<stdio.h>
int main()
{
    int arr[100][100];
    int i, j;
    int n = 10;
    for (i = 0; i < n; i++)
    {
        arr[i][0] = 1; //把外围的1都赋值上
        arr[i][i] = 1;
    }
    for (i = 2; i < n; i++) //i为2是因为第0行和第1行都已被赋值为1
    {
        for (j = 1; j < i; j++)
        {
            arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
        }
    }
    for (int i = 0; i < n; i++)     //打印输出 
    {
        for (int j = 0; j <= i; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }


}

二进制转十进制

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,i;
int s,sum=0;
scanf("%d",&n);
for(i=0;n!=0;i++)
{
	s = n%10;
	n = n/10;
	 sum+=s*pow(2,i);
 
}
printf("十进制数为%d",sum);
 return 0;
 }

十进制转二进制

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
 int n,m=2;
 printf("请输入数字");
 scanf("%d",&n);
 int arr[20], i;
  for(i=0;n!=0;i++)
  {
	arr[i]= n%m;//十进制转二进制算出余数
	n = n/m;//把尾数去掉
  }
  for(;i;i--)
	printf("%d",arr[i-1]);//退出循环时,i已经自增了,所以要减去
}
 
 

递归法 

#include<stdio.h>
int fun(int n)
{
	if(n>0)
	{
		fun(n/2);
		printf("%d",n%2);
	}
}

int main()
{
	int n;
	scanf("%d",&n);
	fun(n);
}

一元二次方程

 deltal就是b^2-4ac,detal>0的时候就有两个根,小于0就没有根,等于0就是一个根

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	float a,b,c,x1,x2;//x1,x2是二个根
	scanf("%f%f%f",&a,&b,&c);
float deltal = b*b-4*a*c;//detal是实数
	if(deltal>0)//大于0两个根
	{
		x1=(-b+sqrt(deltal))/(2*a);
		x2=(-b-sqrt(deltal))/(2*a);
		
	printf("x1值为%.2f,x2值为.2%f",x1,x2);

	}
	else if(deltal==0)//相等于0,有两个相同的根
	{
		x1=x2=(-b)/(2*a);
			printf("解为%.2f",x1);		
	}
	else //小于0
	{printf("没有实数根");
		
	}
 
 }
 

四舍五入

1234.567保留两位小数,对第三位进行四舍五入成为1234.57

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
 
    
	long  t;
	double f;
    scanf("%lf",&f);
	t=(f*1000+5)/10;
   
    printf("%lf",(double)t/100 );
 
 
 }

完全平方数

给整数加上100是一个完全平方数,并且给n加上268也是一个完全平方数

#include <stdio.h>
#include <math.h>

int fun(long n)
{
	int s1 ,s2;
	s1 = (int)sqrt((double)n+100);
	s2 = (int)sqrt((double)n+268);
	if(s1==sqrt((double)n+100)&&(s2==sqrt((double)n+268)))
		return 1;
	else 
		return 0;
}


int main()
{
		int i;	
 for(i=1;i<10000;i++)
{
    if (fun(i))
	{
            printf("%ld\n", i);
             
    }
}
 
	
	
	
}

题2:求1-1000以内的完全平方数

#include<stdio.h>
#include<math.h>
int main()
{
 	 int i,x,n =0;
 	 for(i=1;i<=1000;i++)
 	 {
 	   x = (int)sqrt(i);
 	 	if(x*x==i)
 	 	{
 	 		n++;
		  	printf("%d ",i);	
		}
	 }
 	printf("\n个数为%d",n);
  }


题3:若一自然数全部正整数因子(该因子不包括其本身)之和仍为该自然数,则该自然数成为完全平方数。如:6=1+2+3,则6是完全平方数。求[2,1000]以内的完全平方数。

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int x,m,n  ;
    for (n = 2; n <= 1000; n++)
    {
        x = 0;
        for (m = 1; m < n; m++)
        {
            if (n % m == 0)
                x = x + m;
        }
        if (x == n)
            printf("%d\n",n);
    }
}

。。

求主对角线和反对角线的元素和

1 3 5

4 6 7

9 8 6 

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 3
int main()
{
	int arr[N][N] = {1,3,5,4,6,7,9,8,6};
	int sum=0;
  int i,j,k=0;						
	 for(i=0;i<N;i++)
	 for(j=0;j<N;j++)
	 	 if(i==j||i+j==N-1)
 			sum+=arr[i][j];//arr[1][1] 是共同部分只会被计算一次
			 		
 	printf("%d",sum);
}

1,2,3,4能组成多少种不相同的三位数

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int main()
{
 int xxx[N];
	int i,j=0,a,b,c;
	for(i=0;i<100;i++)
		xxx[i] = 0;
	for(i=123;i<=432;i++)//1234最小数为123,最大三位数为432
	{
		a = i%10;
		b = i/10%10;
		c = i/100%10;
		if(a!=b&&a!=c&&b!=c&&a>=1&&a<=4&&b>=1&&b<=4&&c>=1&&c<=4 )
            //是在1234之间,所以判断条件要在1-4之间
			xxx[j++] = i;

		}
	printf("能组成%d种数字",j);
}
 

方法二

#include<stdio.h>
int main()
{
  int i ,j,k,n;
  for(i=1;i<5;i++)
  	for(j=1;j<5;j++)
  		for(k=1;k<5;k++)
  				if(i!=j&&i!=k&&j!=k)
   					{
   						n = i *100 + 10*j+k;
   						printf("%4d",n);
   						
					   }
}

把每个偶数后面加上.

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_become_str(int n,char *s)
{
    sprintf(s,"%d",n);	//把偶数存到s数组中
}
int main()
{
 
    int x[6] = {1,4,19,82,61,2};
  static char str[200],s[10];
    int i;
    *str = 0;
	for(i=0;i<6;i++)
	{
		if(x[i]%2==0)
		{	int_become_str(x[i],s);//调用函数become
		strcat(str,s);
		strcat(str,".");
		}
	 }
	 puts(str);
 
}

 

判该日是这一年的哪一天

题目:输入某年某月的某日,判断这一天是这一年的第几天,如3月5日,应该把前两个月加起来,然后加上5天即本年第几天,特殊情况,闰年且输入月份大于3时要考虑多加一天

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int  rn(int  year)//判断是不是闰年,是闰年多加一天
{ int  leap;
  leap= (year%4==0 && year%100!=0 || year%400==0);
  return  leap;
}
int fun(int  year, int  month, int  day)
{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   int  days=0 , i;
   for(i=1; i<month; i++)
      days=days + table[i];//累加平年的月份
   days=days+day;//加上日的天数
   if( rn(year) && month>2 )//如果闰年并且累加月份大于2,需要多加1天
      days=days+1;
   return  days;
}
int main()
{  int  year, month, day, days ;
   printf("请输入年、月、日:");
   scanf("%d%d%d",&year, &month, &day);
   days = fun(year, month, day); 
   printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
}




 

方法二

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() 
{
	int year, month, day, leap, sum;
	scanf("%d,%d,%d",&year,&month,&day);
	switch (month)//判断是第几个月
	{
	case 1: sum = 0; break;
	case 2: sum = 31; break;
	case 3: sum = 59; break;
	case 4: sum = 90; break;
	case 5: sum = 120; break;
	case 6: sum = 151; break;
	case 7: sum = 181; break;
	case 8: sum = 212; break;
	case 9: sum = 243; break;
	case 10: sum = 273; break;
	case 11: sum = 304; break;
	case 12: sum = 374; break;
	default:
		printf("error");
		break;
	}
	sum += day;//加上天数
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断是否是闰年
		leap = 1;
	else
		leap = 0;
	if (leap == 1 && month > 2)
		sum++;
	printf("%d年%d月%d日",year,month,day,sum);

}           

数组周边元素之和

#include <stdio.h>
#define  M  4
#define  N  5
int  fun ( int a[M][N] )
{
	int i,j,sum = 0;
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			if(j==0||j==N-1||i==0||i==M-1)//判断是不是周边元素
				sum+=a[i][j];
	return sum;
}

main( )
{  int  aa[M][N]={{1,3,5,7,9},
                  {2,9,9,9,4},
                  {6,9,9,9,8},
                  {1,3,5,7,0}};
   int  i, j, y; 
   printf ( "The original data is : \n" );//打印数组
   for ( i=0; i<M; i++ )
   {   for ( j =0; j<N; j++ ) printf( "%6d", aa[i][j] );
       printf ("\n");
   }
   y = fun ( aa );//调用函数
   printf( "\nThe  sum:  %d\n" , y );
   printf("\n");
 
}

 

将大于整数m且紧靠m的k个素数存入所指的数组中

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
int main()
{  
  int m,k,i,j,n=0;
  int arr[1000];
  printf("请输入数字和周边素数的个数");
  scanf("%d%d",&m,&k);
  for(i=m+1;n<k;i++)//m+1是因为求得是周边素数的个数,所以自身就不算
  {					//n是已经得到的素数的个数
  	for(j=2;j<i;j++)//下边就是判断素数了
  	{
  		if(i%j==0)
  			break;
  		}
  	if(i==j)
  	{
		arr[n++] = i;  
  	}
}
for(i=0;i<n;i++)
printf("%d ",arr[i]);
}


数组行列互换

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
 int arr[5][5] = {1,2,3,6,5,4,7,9,8,6,3,1,7,8,4,8,1,9,6,4,8,5,3,2,0};
	int i,j,t;
	printf("没有调换之前\n");
	 		for(i=0;i<5;i++)
	{
			for(j=0;j<5;j++)
 			printf("%5d",arr[i][j]);
	 	printf("\n");
		 }
	printf("\t");
		 
	for(i=0;i<5;i++)
	for(j=0;j<=i;j++)
 	{ 
	 t = arr[j][i];
	 arr[j][i] = arr[i][j];
	 arr[i][j] = t;
	}
	printf("调换之后\n");
 		for(i=0;i<5;i++)
	{
			for(j=0;j<5;j++)
 			printf("%5d",arr[i][j]);
	 	printf("\n");
		 }
 }

将下标为偶数同时ASCII码为奇数的字符删除

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
 int i,j=0;
 char t[20];
 char s[20] = "";
 gets(s);
  
  for(i=0;s[i]!='\0';i++)
	{
		if(!(i%2==0&&s[i]%2==1))     
 //如果输入1 1的ASCII码是奇数,但是下标是奇数,不应当删除,所以用!运算符而不用 
                                                        //if(i%2!=0&&s[i]%2==0) 
			t[j++] = s[i];
	
	}
	t[j] = '\0';
	puts(t);
 }

将元素平移到数组的最后

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 80
  int main()
{
	int i,t,j,p;
	int  a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
	int sz = 15;
 	printf("原先数据为:\n");
   for(i=0; i<sz; i++)printf("%3d",a[i]);
   printf("\n");
	printf("请输入要把多少元素移动到后面");
	scanf("%d",&p);	
	for(i=0;i<=p;i++)
	{
		t = a[0];//记录第一个元素
		for(j=1;j<sz;j++)//把元素往前移动
		{	
			a[j-1] = a[j];
	 	}
	a[sz-1] = t;//最后一个元素变成了倒数第二个元素,把原先第一个元素放在最后
	}
   for(i=0; i<sz; i++)printf("%3d",a[i]);
   printf("\n\n");
}
 

循环向后移动 
 

#include<stdio.h>
void fun(int *a,int m)
{
	int i,j,k;
	for(i=1;i<=m;i++)
	{
		k = a[10-1];
		for(j=10-1;j>0;j--)
		   a[j] = a[j-1];
		a[0] = k;
	}	
}
int main()
{ 
	int arr[10];
 	int i,m;
 	for(i=0;i<10;i++)
 		scanf("%d",&arr[i]);
 		printf("要向后移动几位\n");
	scanf("%d",&m);
	fun(arr,m);
		for(i=0;i<10;i++)
			printf("%d ",arr[i]);
} 

全部都逆序存放

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	int i,t;
	int arr[5] = {18,2,50,43,69};
	int n = 5;
	for(i=0;i<n/2;i++)
	{
		t = arr[i];
		arr[i] = arr[n-1-i];
		arr[n-1-i] = t;
	}
	for(i=0;i<5;i++)
		printf("%d ",arr[i]);
}	

除了首尾字符外,将其余字符按降序排列

#include <stdio.h>
#include <string.h>

void fun(char *s,int num)
{
	int i,j,t;
	for(i=0;i<num;i++)
	{
		for(j=1;j<num-1;j++)
		{
			if(s[j]<s[j+1]&&(j+1)<num-1)
			{
				t = s[j+1];
			    s[j+1] = s[j];
				s[j] = t;
			}
		}
	}
}

int main()
{
  char s[10];
  printf("输入7个字符的字符串:");
  gets(s);
  fun(s,7);
  printf("\n%s",s);
 
}
 

字符转数字

#include <stdio.h>
#include <string.h>
long  fun ( char *p)
{
  long t=0;
  int flag=1;
  if(*p=='-')//判断正负数
	{  flag = -1;
		p++;
  }
  else if(*p=='+')
		  p++;

  while(*p!='\0')
  {
	t = t*10+(*p-'0');
	p++;
  }
 return t*flag;
}

int main()   /* 主函数 */
{ char s[6]; 
  long    n;
  printf("Enter a string:\n") ;
  gets(s);
  n = fun(s);
  printf("%ld\n",n);
 
}



 

找出二维数组中每列中的最大元素

#include    <stdio.h>
#include	<stdlib.h>
#define  M  3
#define  N  4
void fun(int  tt[M][N],int  pp[N])
{
	int i,j,k=0;
		int max=0;
	for(j=0;j<N;j++)//列
	{
		 max = 0;
		for(i=0;i<M;i++)//行
		{
		 
				if(max<tt[i][j])
				{
					max = tt[i][j];
					
				} 
				
		}
		pp[k++] = max;
	}
}


int main( )
{
 
	int t[M][N]={{68, 32, 54, 12},{14, 24, 88, 58},{42, 22, 44, 56}};
   int  p [ N ],  i,  j,  k;
   printf ( "The original data is : \n" );
   for( i=0; i<M; i++ ){
     for( j=0; j<N; j++ )
       printf ( "%6d", t[i][j] );
     printf("\n");
   }
   fun ( t, p );
   printf( "\nThe result  is:\n" );
   for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] );
   printf("\n");
 
}

求出w的后面几位数

5794 得到的结果是794

#include<stdio.h>
#include<stdlib.h>
unsigned fun(unsigned w)
{
	int i ,n=0,t,s=1;
	t = w;
	while(t!=0)//先判断有多少位
	{
	t = t/10;
	n++;
	}
	for(i=0;i<n-1;i++)
		s*=10;//举例 5947 %1000 = 947 s乘以三次10得到1000
	return w%s;
 
}
int main()
{ 
unsigned x;
  printf("Enter a unsigned integer number: ");
  scanf ("%u",&x);
  printf("The original data is:%u\n",x);
  if(x<10) 
    printf("Data error! ");
  else 
    printf ("The result :%u\n", fun(x));
 
}

统计各个年龄段的人数

#include<stdio.h>
#define N 50
# define M  11
void fun(int *a,  int *b)
{
  int i;
  for(i=0;i<M;i++)
	  b[i] = 0;
  for(i=0;i<N;i++)
  {
	if(a[i]>=100) 
		b[10]++;
	else
		b[a[i]/10]++;//取出十位数,就可以判断是哪个年龄层,19的十位数是1,年龄层是10岁
  }
}
double  rnd()//随机函数
{
  static int t=29,c=217,m=1024,r=0;
  r=(r*t+c)%m;  
  return((double)r/m);
}
int main()
{  int  age[N], i, d[M];void NONO (int d[M]);
   for(i=0; i<N;i++)
	   age[i]=(int)(115*rnd()); /*产生一个随机的年龄数组*/
   printf("The original data :\n");
   for(i=0;i<N;i++) 
	   printf((i+1)%10==0?"%4d\n":"%4d",age[i]); /*每行输出10个数*/
   printf("\n\n");
   fun( age, d);
   for(i=0;i<10;i++)printf("%4d---%4d  :  %4d\n",i*10,i*10+9,d[i]);
   printf("  Over  100  :  %4d\n",d[10]);
}

判断整数是几位

#include  <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int j=0;
	while(n!=0)
	{
		n = n/10;
		j++;
	}
	printf("n是%d位数",j);
}

判断a~z之间的字母个数

#include  <stdio.h>
#include <string.h>
void fun(char *tt, int pp[])
{
	int i;
	for(i=0;i<26;i++)
		pp[i] = 0;
	for(i=0;i<strlen(tt);i++)
	{
		pp[tt[i]-'a']++;
	
	}
}
int main()
{
char aa[1000] ;
   int  bb[26], k ;
   printf( "\nPlease enter  a char string:" ) ; scanf("%s", aa) ;
   fun(aa, bb ) ;
   for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
   printf( "\n" ) ;
}

删除数组中所有相同的数

#include <stdio.h>
#define N 80
int fun(int a[], int n)
{
	int i,j=1;//注意从1开始
	for(i=1;i<n;i++)
	{
		if(a[i-1]!=a[i])
		 a[j++] = a[i];
	}
	return j;
}

int main()
{  int  a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
   printf("The original data :\n");
   for(i=0; i<n; i++)printf("%3d",a[i]);
   n=fun(a,n);
   printf("\n\nThe data after deleted :\n");
   for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
}

判断数组中多少个重复数字

要求:3001中有重复数字0,所以算一个重复数字

先通过while循序将数组元素的各位位上的数字存放到数组b中。再通过循环,将有重复数字的标志flag设置为1,如果flag为1表示有重复数字,sum++,最后返回sum

#include <stdio.h>
#include <string.h>
 
int fun(int a[], int n)
{
	int i,j,k,s,m,b[10],sum=0,flag = 0;
	for(i=0;i<n;i++)
	{
		j = 0;
		while(a[i])
		{
		b[j++] = a[i]%10;
		a[i] = a[i]/10;
		}
	for(k=0;k<j;k++)
	{
		s = b[k];
		for(m=k+1;m<j;m++)
		if(s==b[m])
			flag = 1;
	}
	if(flag ==1)
	{
		sum++;
		flag = 0;
	}
 
}
	return sum;
}
int main()
{
  int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
  int m;
 
  m = fun(a, 10);
  printf("符合条件的数共有:%d\n",m);
 
}

判断什么三角形

三角形任意两边和大于第三边,任意两边差小于第三边。

1、直角三角形:存在有两边的平方和等于第三边的平方。(a2=b2+c2)

2、钝角三角形:存在最长边的平方大于其他两边的平方和。(a2>b2+c2)

3、锐角三角形:存在任意两边的平方和大于第三边的平方。(a2+b2>c2)

4、等边三角形:三边相等。(a=b=c)
 

#include<stdio.h>
int main()
{
	int a, b, c;
	scanf_s("%d,%d,%d", &a, &b, &c);
	if (a + b > c && a + c > b && b + c > a)//判断是不是三角形
	{
		if (a * a > b * b + c * c || b * b > a * a + c * c || c * c > a * a + b * b)
			printf("钝角三角形");
		else if (a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b * b)
			printf("直角三角形");
		else if (b * b + c * c>a * a && a * a + c * c>b * b  &&  a * a + b * b>c * c  && a != b || a != c || b != c)
			printf("锐角三角形");
		else if (a == b && a == c)
			printf("等边三角形");
		else
			printf("不存在");

	}
	else
		printf("三角形不存在");
}

方法2:

#include <stdio.h>
#include <math.h>
int main()
{
    float a,b,c;
    float s,area;
    printf("请输入三角形的三条边:\n");
    scanf("%f,%f,%f",&a,&b,&c);
    if(a+b>c&&b+c>a&&a+c>b)
    {
        s=(a+b+c)/2;
        area=(float)sqrt(s*(s-a)*(s-b)*(s-c));
        printf("三角形的面积是:%f\n" ,area);
        if(a==b&&a==c)
            printf("三角形是等边三角形\n");
        else if(a==b||a==c||b==c)
            printf("三角形是等腰三角形\n");
        else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
            printf("三角形是直角三角形\n");
        else
            printf("三角形是普通三角形\n");
    }
    else
        printf("不能构成三角形\n");
    return 0;
}

鸡兔同笼

#include<stdio.h>
int main()
{
	int m,n,x,y;
	scanf("%d,%d",&m,&n);//m是头的数量,n是脚的数量 
	x = (n-m*2)/2;//兔子的数量
	y = m - x; //m头的数量就相当于总数量。 
	printf("%d %d",x,y);

 } 

方法2:

#include<stdio.h>
int main()
{
	int m,n; 
	int x,y;//x是兔子,y是鸡 
	scanf("%d,%d",&m,&n);//m是头的数量,n是脚的数量 
	for(x=0;x<m;x++)
	{
		for(y=0;y<m;y++)
			if(x+y==m&&4*x+2*y==n)
					printf("%d %d",x,y);
			
	}
 } 

阶乘

求10!

#include<stdio.h>
int main()
{
	int i,s=1;
	for(i=1;i<=10;i++)
		s = s * i;
	printf("%d",s);
 } 

计算1-3+5-7+...-99+101

#include<stdio.h>
int main()
{  
	 int i,t = 1,s=0;
	 for(i=1;i<=101;i+=2)
	 {
	 	 s = s+i*t;	
	  	 t = -t;
	 }
	 printf("%d\n",s);
	 
	 
}
 
 
 
 

求m=1-2+3-4+...+9-10

#include<stdio.h>
int main()
{
   int m = 0,f = 1 , i;
   for(i=1;i<=10;i++)
   {
   		m+=i*f;
   		f = -f;
   }
   printf("m=%d",m);
   
  }

求s=1-1/3+1/5-1/7+....1/101

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() 
{
	int    n, f = -1;
	float sum = 0, t;
	for (n = 1; n <= 101; n=n+2)
	{
		t = 1.0 / n;
		f = -f;
		sum = sum + t * f;
	}
	 
	printf("%f", sum);
 
}  

求e的近似值

题目:根据公式,求e = 1+1/1!+1/2!+1/3!+...

2!就是求他的阶乘1*2 

3! 就是1*2*3

#include<stdio.h>
#include<string.h>
int main()
{
	double e = 1;
	int i =1;
 	int t = 1;
	while(1.0/t>1e-6)
	{
		t = t * i;		
		e = e + 1.0 / t;
		i++;		
	}
	printf("e的阶乘是%lf",e);	
}

求e的n次方

函数fun1求每项分子的值,fun2求每项分母的值

e的x方 = 1+x的平方/1到20的阶乘

#include<stdio.h>
float fun1(int x,int n)
{
	int i;
	float j = 1.0;
	for (i = 1; i <= n; i++)
		j = j * x;
	return j;
}
float fun2(int n )
{
	if (n == 1)
		return 1;
	else
		return (fun2(n - 1) * n);
}

int main()
{
	float e = 1.0;
	int n, x;
	scanf("%d", &x);
	e = e + x;
	for (n = 2; n < 20; n++)
		e = e + fun1(x, n) / fun2(n);
	printf("%d=%8.4f",x,e);

	

}


求a+aa+aaa+aaaa...(n个a)的值

#include<stdio.h>
#include<string.h>
int  fun(int a,int n)
{
 int i ;
 int s = 0;
 for(i=1;i<n;i++)
 {
 	s = s*10+a;
 	
 }
 return s;
	
}
int main()
{
 int n ,a;
 scanf("%d,%D",&a,&n);
 printf("%d",fun(a,n));
 
}
 

卖西瓜

有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个

#include<stdio.h>
#include<string.h>
int main()
{
  int day=0,x1=1020,x2;
  while(x1){
  	x2 = x1/2-2;//核心
  	x1 = x2;
  	day++;
  	
  }
 printf("%d",day);
 }

换钱问题

一百元大钞换为1元,5元,10元,每一种最少要一张

#include<stdio.h>
int main()
{
	int y, w, s, n = 0;
	for (y = 1; y < 100; y++)
		for (w = 1; w < 20; w++)
			for (s = 1; s < 10; s++)
				if (y + w * 5 + s * 10 == 100)
					n++;
	printf("%d",n);
}

求两点坐标的距离

#include<stdio.h>
#include<math.h>
int main()
{
  double x1,x2,y1,y2,dx,dy;
  printf("请输入一个坐标");
  scanf("%lf,%lf",&x1,&y1);
  printf("请输入第二个坐标");
  scanf("%lf,%lf",&x2,&y2);
  dx = x1 - x2;
  dy = y1 - y2;
  dx = sqrt(dx*dx+dy*dy);
  printf("%lf",dx);
  
  }

问海滩上原来有多少个桃子

五只猴子分桃,第一只猴子把桃子分成五份,多了一个,把多的扔进了海中,拿走了一份,第二只猴子把剩下的桃子又分成五份,又多一个,同样扔进海中,拿走一份,其余三只猴子都是一样的操作,

#include<stdio.h>
int main()
{
    int peach, i, j, count, rest;
    for (i = 4; i < 10000; i += 4)
    {
        rest = i;
        count = 0;
        for (j = 0; j < 5; j++)
        {
            peach = rest / 4 * 5 + 1;
            rest = peach;
            if (peach % 4 == 0)
                count++;
            else
                break;
        }
        if (count == 4)
        {
            printf("桃子的总数为%d", peach);
            break;
        }           
    }
}

猴子吃桃问题

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天的一半零一个。到帝释天早上在想吃时,就只剩一个桃子了。求第一天一共摘了多少个桃子?

#include<stdio.h>
int main()
{
	int day, x1, x2;
	day = 9;
	x2 = 1;
	while (day > 0)
	{
		x1 = (x2 + 1) * 2;
		x2 = x1;
		day--;
	}
	printf("%d",x1);
}

方法二:
#include<stdio.h>
int main()
{
 	int n=1,i=1;
 	for(i=1;i<=9;i++)
 		n = (n+1)*2;
	printf("%d",n);
}

服装店问题

服装店经营套服,也单件出售。若买的不少于50套每套 80 元;不足 50套的每套90 元; 只买上衣每件 60 元;只买裤子每条 45元。计算应付款 m。 

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {   
	int c, t, m;
	printf("请输入上衣的数量和裤子的数量");
	scanf("%d,%d",&c,&t);
	if (t == c)
	{
		if (c >= 50)
			m = c * 80;
		else
			m = c * 90;
	}
	else
		if (c > t)
			if (t >= 50)
				m = t * 80 + (c - t) * 60;
			else
				m = t * 90 + (c - t) * 60;
		else
			if (c >= 50)
				m = c * 80 + (t - c) * 45;
			else
				m = c * 90 + (t - c) * 45;
	printf("总价为%d", m);
} 

是否构成四边形

从键盘中华按逆时针或顺时针顺序输入4个顶点坐标,根据顶点坐标判断是否构成四边形

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	int x[4], y[4]; //存放四个顶点横纵坐标
	int i, j, k, l;
	int flag = 0; //判断是否为四边形
	for (i = 0; i < 4; i++)
	{
		printf("输入第%d的横坐标", i + 1);
		scanf("%d", &x[i]);
		printf("输入第%d的纵坐标", i + 1);
		scanf("%d", &y[i]);
	}
	    //判断是否构成四边形
	    for (i = 0; i < 4; i++)
	    {
		    j = (i + 1 % 4);
		    k = (i + 2 % 4);
		    l = (i + 3 % 4);

		    //判断相邻两边是否平行
		    if ((y[j] - y[i]) * (x[k] - x[j]) == (y[k] - y[j]) * (x[j] - x[i]))
		    {
			    flag = 1;
			    break;
		    }
	    }
	if (flag == 1)
		printf("四个点构成不了四边形");
	else
		printf("四个点构成四边形");

	return 0;
} 

折纸问题

有一张纸,厚0.09毫米,将它对折多少次可以打倒珠穆朗玛峰的高度(8848米)?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() 
{
	double a = 9e-2;
	int n = 0;
	while (a <= 8848)
	{
		a = a * 2;
		n++;
	}
		printf("a=%d", n);
}           

三天打鱼两天晒网

有一个渔夫从2023年1月1日开始,每三天打一次鱼,两天晒一次网,当输入2023.1.1以后额任意一天时,该渔夫是在打鱼还是晒网

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
int leap(int a) /*自定义函数 leap()用来指定输入的年份是否为国年*/
{
	if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
		return 1; //润年判定条件  
	else
		return 0; // 不是润年近回 O 
}
		int number(int year, int month, int day)/*自定义函数 number() 计算输入日期距2023年1月1日共有多少天*/
{		
			int sum = 0, i, j, k;

	int a[12] = { 31, 28, 31, 30, 31, 30, 31,31,30, 31, 30, 31 }; //平年每月的天数 
	int b[12] = { 31, 29, 31, 30, 31, 30 ,31 ,31, 30, 31, 30,31 }; //闰年年每月的天数  
	if (leap(year) == 1)/*判断是否为闰年*/
		for (i = 0; i < month - 1; i++)
			sum += b[i]; //x是润年,累加数组 b前m - 1 个月份的天数  
		for (i = 0; i < month - 1; i++)
			sum += a[i]; //不是闰年,累加数组a前m-1个月份的天数 
		for (j = 2023; j < year; j++)
			if (leap(j) == i)
				sum += 366;/*2023年到输入的年份是润年的加366*/
			else
				sum += 365;/*2023年到输入的年份不是闰年的加 365*/
		sum += day; /*将前面累加的结采加上日期,求出总天数*/
		return sum;/*返回计算的天数*/
}
int main() 
{
	int year, month, day, n;
	printf("请输入年月日\n");
	scanf("%d%d%d" ,&year, &month, &day  );
	n = number(year, month, day);
	if((n % 5) < 4 && (n % 5) > 0)
		printf("%d:%d:%d 打鱼\n", year, month, day);
	else
		printf("%d:%d:%d 晒网\n", year, month, day);
}           

兔子问题(斐波那契)

#include<stdio.h>
int main()
{
	long f1, f2;
	int i;
	f1 = f2 = 1;
	for (i = 1; i <= 20; i++)
	{
		printf("%12ld %12ld", f1, f2);
		if (i % 2 == 0)
		{
			printf("\n");
			f1 = f1 + f2;
			f2 = f1 + f2;
		}
	}


}

鞍点

找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。

方法:找出最大的数,在找出改数所在列数的最小的数,如果两个相同,就是鞍点

#define MAX 10
#define MIN 10
int main()
{
    int arr[MAX][MIN];
    int n, m; // n行 m列
    int i, j, k;
    // 输入数组的行数和列数
    printf("Enter the number of rows (1-10): ");
    scanf("%d", &m);
    printf("Enter the number of columns (1-10): ");
    scanf("%d", &n);
    printf("Enter the elements of the array:\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for (i = 0; i < m; i++)
    {
        int max = 0;
        for (j = 1; j < n; j++)
        {
            if (arr[i][max] < arr[i][j])
            {
                max = j;
            }
        }
        int min = 0;
        for (j = 1; j < m; j++)
        {
            if (arr[min][max] > arr[j][max])
            {
                min = j;
            }
        }
        if (arr[i][max] == arr[min][max])
        {
            printf("Saddle point found at (%d, %d): %d\n", i + 1, max + 1, arr[i][max]);
        }
    }

    return 0;
}

将输入的数字按规律插入数组

#include<stdio.h>
int main()
{
	int a[10] = {10,20,30,40,50,60,70,80,90};
	int i, j, t;
	int n;
	scanf("%d", &n);
	a[9] = n;
	for(i=0;i<9;i++)
		if (a[9] < a[i])
		{
			t = a[9];
			for (j = 8; j >= i; j--)
			{
				a[j + 1] = a[j];
				a[j] = t;
			}
		}
	for (i = 0; i < 10; i++)
		printf("%d\t",a[i]);
	return 0;
}

数据加密

加密规则:每位数字都加6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换

#include<stdio.h>
int main()
{
   int num,enum1,d1,d2,d3,d4,d5; 
   scanf("%d",&num);
   d1 = num / 10000;
   d2 = (num/1000)%10;
   d3 = (num/100)%10;
   d4 = (num/10)%10;
   d5 = num%10;
   //加密 
   d1 = (d1+6) % 8;
   d2 = (d2+6) % 8;
   d3 = (d3+6) % 8;
   d4 = (d4+6) % 8;
   d5 = (d5+6) % 8;
   //交换
   enum1 = d5*10000+d4*1000+d3*100+d2*10+d1; 
   printf("%d",enum1);    
}

三点判断三角形 

题目:已知平面上三个点:(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角) 

#include<stdio.h>
int main()
{
 int x1 = 7,y1 = 1;
 int x2 = 4,y2 = 6;
 int x3 = 5,y3 = 8;
 //计算向量AB和向量AC 
 int vecAB_x = x2 - x1;
 int vecAB_y = y2 - y1;
 int vecAC_x = x3 - y1; 
 int vecAC_y = y3 - y1;
 
 //计算向量AB和向量AC的点积
 int d = vecAB_x * vecAC_x + vecAB_y * vecAC_y; 
 if(d>0)
 {
 	printf("锐角三角形");
 }
 else if(d==0)
  	printf("直角三角形");
 else 
 	printf("钝角三角形");
}

折半查找法

#include <stdio.h>
#define N 15
int main() {
	
   	int i,number,top,bott,mid,loca,a[N],flag=1,sign; 
    char c;
    scanf("%d",&a[0]);//输入第一个数 
    i = 1;
    while(i<N)//检查数是否已经输入完毕 
    {
    	scanf("%d",&a[i]);//输入下一个数 
    	if(a[i]>=a[i-1])//如果输入的数大于前一个数 就继续输入 
    		i++;
    	else 
    	printf("重新输入");
	}
	printf("输入的数字为\n");
    for(i=0;i<15;i++)
    	printf("%d ",a[i]);
    	printf("\n");
    while(flag)
    {
    	printf("输入要找的数字");
    	scanf("%d",&number);
    	sign = 0; //sign为0表示尚未找到 
    	top = 0;//top是查找区间的启示位置 
    	bott = N -1;//bott是查找区间的最末位置 
    	if((number<a[0])||(number>a[N-1]))//要查找的数不在区间内 
    		loca = -1;//表示找不到 
    	//核心代码 
    	while((!sign)&&(top<=bott))
    	{
    		mid = (bott+top)/2;//找出中间元素的下标 
    		if(number==a[mid])//如果要查找中的数正好等于中间元素 
    			{
    				loca = mid;//记录该下标 
    				printf("找到了,下标为%d ",loca);
    				sign =1;//表示找到了 
				}
			else if(number<a[mid])//如果要找的数小于中间元素的值 
				bott = mid - 1;//只须在下标为0~mid-1的元素中找 
			else				//如果要查找的数不小于中间元素的值 
				top = mid+1;
			
		}
			if(!sign||loca==-1)  //sign为0或loca等于-1,意味着找不到 
		printf("error");
	  
	  
	}
    
    
    
    
    
    
}
 

负数靠左,正数靠右

#include<stdio.h>
int main()
{
	int a[10] = {9,-6,5,-8,-7,-5,3,12,10,-11};
	int i,left=0,right = 9,t;
 	while(left<right)
 	{
 		while(a[left]<0)
 			left++;
 		while(a[right]>0)
 			right--;
 		if(left<right)
 		{
 			t = a[left];
 			a[left] = a[right];
 			a[right] = t;
 			left++;
 			right--;
		 }
	 }
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	
	
	
	
	
	
	
}

球的高度

一个球从100米高度自由落下,每次落地后反弹回原来高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 

#include<stdio.h>
int main()
{
	int n = 10; //第10次落地 
	double height = 100;//初始高度 
	double distance = 0.0;//总距离 
	int i;
	for(i=1;i<=n;i++) 
	{
		distance += height; //累加经过的距离 
		height /=2.0; //更新反弹高度 
		distance += height;//累加反弹高度 
	}
	printf("第%d次落地时经过的总距离:%.2f米\n",n,distance);
	printf("第%d次反弹的高度:%.2f米\n",n,height);	
 } 
 

*---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值