c学习第2天

1、找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。

//
//  main.c
//  andian
//
//  Created by lanou on 13-10-22.
//  Copyright (c) 2013年 星星科技. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#define N 3
#define M 3
    /*
    int i,j,k,max,maxj,flag;
    int a[N][M]={
        {1,9,6}
        ,{2,7,5}
        ,{8,9,3}
            };
    
    for(i=0;i<N;i++)
    {
        max=a[i][0];
        maxj=0;
        for(j=0;j<M;j++)
        {
            
            if(a[i][j]>max)
            {
                max=a[i][j];
                maxj=j;
            }
        }
        flag=1;
        for(k=0;k<N;k++)
            
            if(max>a[k][maxj])
            {
                flag=0;
                break;
            }
        if(flag)
        {
            printf("a[%d][%d]=%d
",i,maxj,max);
            break;
        }
    }
    if(!flag)
        printf("Tt is not exist!
");

    return 0;
     */
    int main(void)
    {
        int number[3][4] = {0};//假定产生一个3x4的数组
        for (int i = 0; i < 3; i ++) {//产生12个元素放到3x4的数组中,并且输出。
            for (int j = 0; j < 4; j++) {
                number[i][j] = arc4random()%100;
                printf("%d	",number[i][j]);
            }
            printf("
");
        }
        
        
        int count  = 0;//鞍点个数
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                int max = number[i][j];//让max先等于当前数字
                int isMax = 1,isMin = 1;
                for (int column = 0; column < 4; column++) {//让max和本行的每个数字比较,如果max<本行的其他数字说明这个数number[i][j]不是鞍点
                    if (max < number[i][column]) {
                        isMax = 0;
                        break;
                    }
                }
                if(isMax == 0){
                    continue;
                }
                int min = number[i][j];
                for (int row = 0; row < 3; row ++) {//让min和本列的每个数字比较,如果min>本列的其他数字说明这个数number[i][j]不是鞍点
                    if (min > number[row][j]) {
                        isMin = 0;
                        break;
                    }
                }
                if (isMin == 0) {
                    continue;
                }
                
                if (max == min) {
                    count ++;
                    printf("Saddlepoint number[%d][%d] = %d
",i,j,number[i][j]);
                }
            }
        }
        
        if (count == 0) {
            printf("没有鞍点");
        }
        
        return 0;
    }

2、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:

13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,

最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。

void yesuzhaopantu()
{
        /*
         2、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。
         */
        //思路解析: 找一个a[13]的数组,所有位为0,开始以n = 3 报数 到3变1
        
    int a[13] = {0};
    int n = 1 , p = 0;
    for(int i = 0 ; i < 14; i ++){
        // i 表示人数(0-12) 13 取不到的
        if(i == 13){
            i = -1;
            continue;
        }
        //n是报数
        if(n == 3){
            if(a[i] == 0){
                a[i] = 1;
                n = 0;
                p++;
            }else{
                n = 2 ;
            }
        }
        //p是点到名的人数
        if(p == 12){
            break;
        }
        n++;
    }
    for (int j = 0 ; j < 13; j ++) {
        if(a[j] == 0 ){
            printf("%d",j+1);
        }
    }  
}
原文地址:https://www.cnblogs.com/yinyakun/p/3384954.html