C 언어 고전 알고리즘 (1)

155256 단어
2019
1. 분수 서열의 전 n항과 결과를 구하고 그 결과는 네 자리의 소수를 보류한다.

```c
#include
int main()
{
	int i=0,n;
	float sun=2,mum=1,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		sum+=sun/mum;
		sun=sun+mum;
		mum=mum+1;
	}
	printf("%0.4lf
"
,sum);

}

## 2.     n,        (    ,       (       )     ,     ):

```c

```c
#include
void main()
{
	int sum=0,i,n;
	printf("    n:");
	scanf("%d",&n);
	for(i=1;i

## 3.     n,  n     ,:

```c
#include
#define M 20
void main()
{
	int i,j,n;
	scanf("%d",&n);
	int a[M][M];
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i;j++)
		{
			if(i==j||j==1)
				a[i][j]=1;
			else
				a[i][j]=a[i-1][j-1]+a[i-1][j];
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i;j++)
			printf("%5d",a[i][j]);
		printf("
"); } }

4. n권의 이름, 단가, 저자와 출판사를 입력하여 제목에 따라 순서대로 출력하고 구조체를 사용한다.
#include
#include
#define M 30
struct book
{
	char name[20];
	double price;
	char writer[20];
	char publisher[20];  
};
void main()
{
	struct book bk[M],temp;
	int i,j,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s  %lf  %s  %s",bk[i].name,&bk[i].price,bk[i].writer,bk[i].publisher);
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(strcmp(bk[j].name,bk[j+1].name)>0)
temp=bk[j];
			bk[j]=bk[j+1];
			bk[j+1]=temp;
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%s  %lf  %s  %s  ",bk[i].name,bk[i].price,bk[i].writer,bk[i].publisher);
		printf("
"
); } }

5. 11에서 n 사이의 소수이자 회문수의 정수 개수를 입력한다. (이런 종류의 숫자가 있는데 그들이 보는 것과 거꾸로 보는 것은 같은 숫자이다. 예를 들어 1216562332 등이다. 이런 숫자를 회문숫자라고 한다.)
#include
#include
int sushu(int i)
{
	int j;
	for(j=2;j<=sqrt(i);j++)
		if(i%j==0)
			break;
		if(j>sqrt(i))
			return 1;
		else   //   
			return 0;
}
int huiwen(int i)
{
	int t,m=0;
	t=i;
	do
	{
		m=m*10+t%10;
		t=t/10;
	}while(t!=0);
	if(m==i)
		return 1;
	else   //   
			return 0;
}
void main()
{
	int n,i,sum=0;
	scanf("%d",&n);
	for(i=11;i<=n;i++)
	{
		if(sushu(i)&&huiwen(i))
		{	sum++;
		printf("%5d",i);
		}
	}
	printf("
"
); printf("%d
"
,sum); }

2018
1. Sn=a+aa+aa+...+aa...a n개 a의 값을 구한다
#include
void main()
{
	int i,a,n,sum=0,t=0;
	printf("input a and n:");
	scanf("%d%d",&a,&n);  //        
	for(i=1;i<=n;i++)
	{
		t=t*10+a;  // i   
		sum=sum+t;
	}
	printf("sum=%d
"
,sum); }

2. 년 모월 모일을 입력하여 이 날이 이 해의 며칠째라고 판단한다.
#include 
int main()
{
    int i, days = 0;
    int year, month, day;
    int day_tab[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    printf("   、 、 ,     :");
    scanf("%d%d%d", &year, &month, &day);
    for (i=1; i<month; i++)
    {
        days += day_tab[i];
    }
    days += day;
    if ((year%4==0 && year%100!=0 || year%400==0) && month>=3)
        days+=1;
    printf("%d %d %d       %d !
"
, year, month, day, days); return 0; }

3. 101-200 사이에 몇 개의 소수가 있는지 판단하고 모든 소수를 출력한다
#include
#include
int main()
{
    int n,i,count=0;
    printf("101~200    :
"
); for(n=101;n<=200;n++) { for(i=2;i<=sqrt(n);i++) if(n%i==0) break; if(i>sqrt(n)) { count++; printf("%d ",n); if(count%5==0) printf("
"
); } } printf("
"
); printf(" %d
"
,count); return 0; }

4. insert 함수를 사용하여 작은 배열에서 큰 배열까지의 배열에 정수를 삽입하고 원래 순서대로 출력합니다.
#include
#define N 10
void order(int a[],int n)
{
	int i,j,t;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-i-1;j++)
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
}
int insert(int a[],int n,int x)
{
	int i;
	i=n-1;
	while(i>=0&&a[i]>x)
	{
		a[i+1]=a[i];
		i--;
	}
	a[i+1]=x;
	n++;
	return n;
}
void main()
{
	int i,n,x,a[N],k;
	printf("input n:");
	scanf("%d",&n);
	printf("input teams:");
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	printf("input move number x:");
	scanf("%d",&x);
	order(a,n);
	k=insert(a,n,x);
	for(i=0;i<k;i++)
		printf("%3d",a[i]);
}  

5. 키보드에서 10개의 수를 입력하여 최대치, 최소치와 평균치를 구한다
#include
#define N 10
void main()
{
 int a[10],t,i,min,max;
 double avg,s=0;
 printf("input numbers:");
 for(i=0;i<N;i++)
	 scanf("%d",&a[i]);
 for(i=0;i<N;i++)
 {
  s=s+a[i];
  if(i==0)
  {
   min=a[i];
   max=a[i];
  }
  else
  {
   if(a[i]<min)  //      ,        
   {
    t=min;
    min=a[i];
    a[i]=t;
   }
   if(a[i]>max)   //      ,        
   {
    t=max;
    max=a[i];
    a[i]=t;
   }
  }
 }
  avg=s/10;
  printf("max=%d,min=%d,avg=%lf
"
,max,min,avg); }

2017
6. 키보드에서 큰 키에서 작은 키로 10개 입력
#include
void main()
{
int i,j,a[10],t;
printf("      : ");
for (i = 0; i < 10; i++)
scanf("%d",&a[i]);
for (i = 0; i < 10; i++)
{
for (j = i + 1; j < 10;j++) //  
if (a[i] < a[j]){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
printf("       :
"
); for (i = 0; i < 10; i++) printf("%d
"
, a[i]); }#include #define N 10 void sort(int a[],int n) { int i,j,t; for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { if(a[j]<a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void main() { int i,a[N]; printf("input numbers:"); for(i=0;i<N;i++) scanf("%d",&a[i]); sort(a,N); for(i=0;i<N;i++) printf("%3d",a[i]); }

7.linemax를 작성하여 M행 N열 2차원 배열에서 최대값을 찾아 아래 첨자를 기록한다
#include
#define M 3
#define N 4
void main()
{
    int a[M][N],i,j,max,maxi,maxj;
    printf("please enter elements: ");
    for(i=0;i<M;i++){
        for(j=0;j<N;j++)
         scanf("%d",&a[i][j]);
        }
     max=a[0][0];
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            if(a[i][j]>max)
            {
                max=a[i][j];
                maxi=i;
                maxj=j;
            }
        }
    }
   printf("max=a[%d][%d]=%d
"
,maxi,maxj,max); }

2016
1차원 배열의 최대 요소와 그 아래 첨자를 구합니다.

  • #include
    void findmax(int s[],int t,int *k)
    {
    	int p;
    	for(p=0,*k=p;p<t;p++)
    		if(s[*k]<s[p])
    			*k=p;
    }
    void main()
    {
    	int b[10],i,*k=&i;
    	for(i=0;i<10;i++)
    		scanf("%d",&b[i]);
    	findmax(b,i,k);
    	printf("%d
    %d
    "
    ,*k,b[*k]); } 2. #include #define N 5 int myf(int *p,int n) { int i,maxi; maxi=0; for(i=0;i<n;i++) if(p[maxi]<p[i]) maxi=i; return maxi; } int main() { int a[N],t,i; printf("input numbers:
    "
    ); for(i=0;i<N;i++) scanf("%d",&a[i]); t=myf(a,N); printf("The MAX is a[%d] = %d,max index is %d
    "
    ,t,a[t],t); return 0; }

    3. 100~300칸 소수 인쇄:
    #include
    #include
    void main()
    {
    	int i,j,k=0,flag,m;
    	for(i=101;i<300;i+=2)
    	{
    		flag=1;j=2;
    		m=sqrt(i);
    		while(j<=m&&flag)
    			if(i%j==0)
    				flag=0;
    			else 
    				j++;
    			if(j>m)
    			{
    				printf("%5d",i);
    				k+=1;
    				if(k%5==0)
    					printf("
    "
    ); } } }#include #include void main() { int i,j,sum=0; for(i=100;i<=300;i++) { for(j=2;j<=sqrt(i);j++) // for {} if(i%j==0) break; if(j>sqrt(i)) { printf("%d ",i); sum++; } } printf("sum=%d
    "
    ,sum); }

    4. 설계 함수 완성 화식 계산sum=1-1/2-1/3+1/4-1/5-1/6...(n항목 입력, 1정 2음):
    #include
    #define n 10
    void main()
    {
    	int i,flag=-1;
    	double a=1,b,sum=0;  //             
    	for(i=1;i<=n;i++)
    	{
    		if(i%3==1||i%3==2)
    			flag=-flag;
    		b=i;
    		sum=a/b*flag+sum;
    	}
    	printf("sum=%lf
    "
    ,sum); }

    5. 라이브러리 함수를 사용하지 않고 문자열 연결을 완료합니다.
    #include
    void main()
    { char s1[80],s2[40];
      int i=0,j=0;
      scanf("%s
    %s"
    ,s1,s2); while (s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i]='\0'; printf("%s
    "
    ,s1); }#include #define N 100 void main() { int i=0,j=0; char s1[N],s2[N]; printf("input two strings:
    "
    ); gets(s1); gets(s2); while(s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i++]='\0'; printf("%s
    "
    ,s1); }

    2015
    1. 윤년을 수출하고 세 개씩 줄을 바꾼다.
    #include
    void main()
    {
    	int i,sum=0;
    	for(i=1900;i<=2000;i++)
    		if(i%4==0&&i%100!=0||i%400==0)
    		{
    			printf("%d  ",i);
    			sum++;
    			if(sum%5==0)
    				printf("
    "
    ); } printf("sum=%d
    "
    ,sum); }

    2014
    1. 1000 이내의 질량을 출력한다.
    #include
    #include
    int sushu(int i)
    {
    	int j;
    	for(j=2;j<=sqrt(i);j++)
    		if(i%j==0)
    			break;
    		if(j>sqrt(i))
    			return 1;
    		else
    			return 0;
    }
    void main()
    {
    	int i,sum=0;
    	for(i=2;i<=1000;i++)
    		if(sushu(i))
    		{
    			sum++;
    			printf("%d\t",i);
    			if(sum%5==0)
    				printf("
    "
    ); } printf("sum=%d
    "
    ,sum); }#include #include void main() { int i,j,sum=0; for(i=2;i<=1000;i++) { for(j=2;j<=sqrt(i);j++) if(i%j==0) break; if(j>sqrt(i)) { printf("%d\t",i); sum++; if(sum%5==0) printf("
    "
    ); } } printf("sum=%d
    "
    ,sum); }

    2. 16진수를 10진수로 변환
    #include 
    #include 
    #include 
    int main( )
    {
      char a[10];
      void convert(char a[]);
      printf("        :");
      gets(a); //       
      convert(a);
      return 0;
    }
    void convert(char a[])
    {
      int n,i,num=0;
      n=strlen(a);
      for(i=n-1;i>=0;i--)
      {
       if(a[i]>='0'&&a[i]<='9')
        num+=(a[i]-'0')*pow(16,n-1-i);
        else if(a[i]>='A'&&a[i]<='Z')
            num+=(10+(a[i]-'A'))*pow(16,n-1-i);
         else if(a[i]>='a'&&a[i]<='z')
              num+=(10+(a[i]-'a'))*pow(16,n-1-i);
      }
      printf("      :");
      printf("%d",num);
    }
    

    3. 여러 진수 변환: 임의의 진수 변환 10진수:
    #include 
    int main()
    {
    	int x,p;   //x      p          
    	scanf("%d",&x);
    	scanf("%d",&p);
    	int y=0,product=1;
    	while(x!=0){
    		y=y+(x%10)*product;
    		x=x/10;
    		product=product*p;
    	}
    	printf("%d
    "
    ,y); return 0; }#include int main(){ int x,p; //x ,p scanf("%d",&x); scanf("%d",&p); int a[100]; // int count=0; do{ a[count++]=x%p; x=x/p; }while(x!=0);// 0 for(int i=count-1;i>=0;i--){ printf("%d",a[i]); } }

    4. 년도와 일수를 입력하고 해당 년, 월, 일을 출력합니다.
    #include 
    void month_day(int year,int yearday,int *pmonth,int *pday)
    {
    	int k,leap;
    	int tab[2][13]={
    		{0,31,28,31,30,31,30,31,31,30,31,30,31},
    		{0,31,29,31,30,31,30,31,31,30,31,30,31},
    	};//                  
    	leap=(year%4==0&&year%100!=0)||year%400==0; //      
    	for(k=1;yearday>tab[leap][k];k++)
    		yearday-=tab[leap][k];
    		*pmonth=k;
    		*pday=yearday;
    } 
    int main()
    {
    	int day,month,yearday,year; //     、 、       
    	printf("input year and yearday:");
    	scanf("%d%d",&year,&yearday);
    	month_day(year,yearday,&month,&day);
    	printf("%d-%d-%d
    "
    ,year,month,day); return 0; }#include int f(int year) { if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; } void fun(int year,int days,int *month,int *day) { int k,leap; int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; leap=f(year); for(k=1;days>tab[leap][k];k++) days=days-tab[leap][k]; *month=k; *day=days; } void main() { int year,days,month,day; printf("input year and days:
    "
    ); scanf("%d%d",&year,&days); fun(year,days,&month,&day); printf("%d %d %d
    "
    ,year,month,day); }

    2013
    1. 키보드 10개 입력, 거품 정렬,
    #include
    #define N 10
    void sort(int a[],int k)   // k     n,    
    {
    	int i,j,t;
    	for(i=0;i<k-1;i++)
    		for(j=0;j<k-i-1;j++)
    			if(a[j]>a[j+1])
    			{
    				t=a[j];
    				a[j]=a[j+1];
    				a[j+1]=t;
    			}
    }
    void main()
    {
    	int i,a[N];
    	printf("input some numbers:
    "
    ); for(i=0;i<N;i++) scanf("%d",&a[i]); sort(a,N); for(i=0;i<N;i++) printf("%d\t",a[i]); }


  • 1. 바늘을 가리키는 바늘로 10개의 문자열을 정렬하고 출력한다
    #include 
    #include 
    #include 
    void sort(char *str[],int size)
    {
    	int i,j;
    	char *temp;
    	for(i=0;i<size-1;i++)
    	{
    		for(j=i+1;j<size;j++)
    		{
    			if(strcmp(str[i],str[j])>0)  //        
    			{
    				temp=str[i];
    				str[i]=str[j];
    				str[j]=temp;
    			}
    		}
    	}
    }
     int main()
    {
    	char *p[200],str[200][20];
    	int i,n;
    	printf("         : ");
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		scanf("%s",str[i]);
    		p[i]=str[i];
    	}
    	sort(p,n);
    	printf("       :
    "
    ); for(i=0;i<n;i++) printf("%s
    "
    ,p[i]); return 0; }

    2.C 언어 원숭이 복숭아 먹기 문제 귀속법
    #include
    int fun(int day)
    {
    	if(day==20)
    		return 1;
    	else
    		return (fun(day+1)+1)*2;
    }
    void main()
    {
    	int sum;
    	sum=fun(1);
    	printf("sum=%d
    "
    ,sum); }

    2011
    1. 귀속 방법으로 학생의 나이를 계산한다. 이미 알고 있는 첫 번째 직원의 나이는 20세이고 나머지 직원은 한 사람보다 3살 많으며 일곱 번째 학생의 나이를 구한다.
    #include
    #define N 20
    int age(int x)
    {
        if(x==1) return N;
        return age(x-1)+3;
    }
    void main()
    {
        printf("%d
    "
    ,age(7)); }

    2. 정렬 하위 함수를 작성하여 10개의 수를 작은 것에서 큰 것으로 정렬하고 주 함수에서 호출합니다.
    #include
    void sort(int *a, int n)
    {
    	int i,j;
        for (i = 0; i < n - 1; i++)
            for (j = 0; j < n - i - 1; j++)
            {
                if (a[j]< a[j + 1])
                {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
    }
    void main()
    {
        int a[10],i;
    	for(i=0;i<10;i++)
    		scanf("%d",&a[i]);
        sort(a,10);
        for (i = 0; i < 10; i++)
            printf("%d  ", a[i]);
        printf("
    "
    ); }

    2010
    1. 두 함수를 써서 두 정수의 최대 공약수와 최소 공배수를 구하고 주함수로 이 두 함수를 호출하여 결과를 출력한다.두 개의 정수는 키보드에서 입력한다.
    #include
    //       (        )
    int cy(int x, int y)
    {
    	if(y==0)
    		return x;
    	else 
    	return cy(y,x%y);
    }
    //       
    int cb(int x, int y)
    {
    	return (x*y)/cy(x, y);
    }
    void main()
    {
    	int a, b;           //      
    	scanf("%d %d", &a, &b);
    	printf("cy=%d, cb=%d
    "
    , cy(a, b), cb(a, b)); // }

    2. 정수 10개를 입력하고 그 중 가장 작은 수를 첫 번째 수와 대조하고 가장 큰 수를 마지막 수와 대조한다.세 가지 함수 쓰기;① 10개 숫자 입력하기;② 처리하기;③ 10개를 출력한다.
    #include
    void fun(int a[],int n)
    {
        int i,min,b=0,max,temp;
    	min=a[0];
        max=a[0];
        for(i=0;i<n;i++)
            if(min>a[i])
            {
                min=a[i];
                b=i;
        }
    temp=a[0];a[0]=a[b];a[b]=temp;
            for(i=0;i<n;i++)
            if(max<a[i])
            {
                max=a[i];
                 b=i;
    
            }
            temp=a[9];a[9]=a[b];a[b]=temp;}
    void shuchu(int a[],int n)
    {
        int i;
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
    }
    void main()
    {
        int n=10,i,a[10];
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        fun(a,n);
        shuchu(a,n);
    }
    

    좋은 웹페이지 즐겨찾기