알고리즘 문제 입 출력 총화

29733 단어 알고리즘c 언어
이번 주 에 풀 었 던 몇 가지 알고리즘 문 제 를 정리 해 보 자.
이번 주 에 풀 린 알고리즘 문 제 는 공통 적 인 특징 이 있 습 니 다. 바로 여러 그룹의 입력 입 니 다. 그래서 먼저 여러 그룹의 입 출력 방식 을 정리 하 겠 습 니 다.
C 언어 다 중 그룹 입력
  • 입력 이 언제 끝 나 는 지 명확 하 게 밝 히 지 않 았 다. 이 경우 기본 값 은 '파일 종료' (EOF) 로 끝 나 는 표지 다.다음 으로 써 야 합 니 다:
  • while(scanf("%d %d", &a, &b) != EOF)
    	{
         
    		        
    	}
    

    가장 간단 한 예 를 들다.
    이 문 제 는 언제 입력 이 끝 날 지 명확 하 게 밝 히 지 않 았 습 니 다. 정확 한 표기 법 은 다음 과 같 습 니 다.
    #include
    int main(void)
    {
         
    	int a, b;
    	while(scanf("%d %d", &a, &b) != EOF)
    	{
         
    		printf("%d
    "
    , a + b); } return 0; }
  • 지정 한 데 이 터 를 입력 하면 다음 과 같이 쓸 수 있 습 니 다.
  • int n,  a,  b;
    scanf("%d",  &n);
    while (n--)
    {
         
    	         .         
    }
    return 0;
    }
    

    또는 for 순환 을 사용 하여 배열 로 데 이 터 를 저장 할 수 있 습 니 다.
    while(scanf("%d", &n) != EOF)
    {
         
    	for(int i = 0; i < n; i++)
    	{
         
    		scanf("%d", &a[i]);
    	}
    

    문제 풀이 에서 만난 예 를 들 어 보 자.
    #include
    int main(void)
    {
         
    	int n, a[100], ret;
    	while(scanf("%d",&n)!= EOF)
    	{
         
    		ret = 1;
    		for(int i = 0; i < n; i++)
    		{
         
    			scanf("%d", &a[i]);
    		}
    		for(int i = 0; i < n; i++)
    		{
         
    			if(a[i] % 2 == 1)
    			{
         
    				ret = ret * a[i];	
    			} 
    		}
    		printf("%d
    "
    , ret); } return 0; }
  • 특정한 요소 로 끝 나 는 문자: 0 또는 - 1 로 끝 나 는 입력.
  •  while(scanf("%d",&n),n!=0) {
         
     
      } 
    

    예 를 들 어 이 제목 은
    #include
    int Is_prime(int m)
    {
         
    	int nav;
    	if(m < 0)
    	{
         
    		nav = 0;
    	}
    	if(m == 2)
    	{
         
    		nav = 1;
    	}
    	else
    	{
         
    		for(int i = 2; i < m; i++)
    		{
         
    			if(m % i == 0)
    			{
         
    				nav = 0;
    				break;
    			}
    			else
    			{
         
    				nav = 1;
    			}
    		}
    	}
    	return nav;
    }
    int main(void)
    {
         
    	int x, y, flag;
    	while(scanf("%d %d", &x, &y), x != 0 || y != 0)
    	{
         
    		int count = 0;
    		for(int i = x; i <= y; i++)
    		{
         
    			int sum = i * i + i + 41;
    			int ret = Is_prime(sum);
    			if(ret == 1)
    			{
         
    				count++;
    			}
    		}
    		if(count == y - x + 1)
    		{
         
    			printf("OK
    "
    ); } else { printf("Sorry
    "
    ); } } return 0; }

    C 언어 다 중 그룹 출력
    이번 주 몇 문제 에서 흔히 볼 수 있 는 것 은 출력 사이 에 빈 칸 이 있 는 문제 이다.
    여기 서 먼저 두 가지 상황 을 정리한다.
  • 알 수 없 는 총수 의 출력 은 첫 번 째 데 이 터 를 직접 출력 할 수 있 고 두 번 째 데이터 부터 시작 하기 전에 빈 칸 을 추가 할 수 있 습 니 다.
  • 이미 알 고 있 는 수량의 출력 은 두 데이터 사이 에 빈 칸 처리 방법 이 있 습 니 다. 앞의 n - 1 개의 출력 뒤에 빈 칸 을 가 져 갈 수 있 고 n 번 째 는 빈 칸 을 가 하지 않 습 니 다.물론 첫 번 째 방법 도 사용 할 수 있다.

  • 다음은 두 가지 방법의 사용 을 볼 수 있다. 1.
    #include
    #include
    
    int main(void)
    {
         
    	int m, n;
    	while(scanf("%d %d", &m, &n) != EOF)
    	{
         
    		int count = 0;
    		for(int i = m; i <= n; i++)
    		{
         
    			int a = i % 10;
    			int b = i / 10 % 10;
    			int c = i / 100;
    			if(pow(a, 3) + pow(b, 3) + pow(c, 3) == i)
    			{
         
    				count++;
    				if(count == 1)
    				{
         
    					printf("%d",i);
    				}
    				else
    				{
         
    					printf(" %d",i);
    				}
    			}
    		}
    		if(count != 0)
    		{
         
    			printf("
    "
    ); } else { printf("no
    "
    ); } } return 0; }

  • #include
    #include
    void reset(char* a, char* b)
    {
         
    	char t;
    	t = *b;
    	*b = *a;
    	*a = t;
    }
    
    int main(void)
    {
         
    	char a[3];
    	while(scanf("%s", &a) != EOF)
    	{
         
    		getchar();
    		if(a[0] > a[1])
    		{
         
    			reset(&a[0], &a[1]);
    		}
    		if(a[0] > a[2])
    		{
         
    			reset(&a[0], &a[2]);
    		}
    		if(a[1] > a[2])
    		{
         
    			reset(&a[1], &a[2]);
    		}
    		for (int i = 0;i < 3;i++)
    		{
         
    			if(i <= 1)
    			{
         
    				printf("%c ",a[i]);
    			}
    			else
    			{
         
    				printf("%c",a[i]);
    			}
    		}
    		
    		printf("
    "
    ); } return 0; }

    좋은 웹페이지 즐겨찾기