模擬問題

1.約瑟夫問題:用aLoop來模擬n個猴子痹束,移除的就把數(shù)組置零宇色。設(shè)置一個整型指針來指向當(dāng)前數(shù)到的數(shù)組位置能庆。

#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 300

int aLoop[MAX_NUM];
void main()
{
    int n,m,i;
    int nPtr;
    int nCount;
    while(1)
    {
        scanf("%d%d",&n,&m);
        if(n==0) break;

        for(i=0;i<n;i++) aLoop[i]=i+1;
        nPtr=0;
        for(i=0;i<n;i++)
        {
           nCount=0;
           while(nCount<m)
           {
               while(aLoop[nPtr]==0)
                   nPtr = (nPtr+1)%n;
               nCount++;
               nPtr = (nPtr+1)%n;
           }
           nPtr--;//要記得回退一位
           if(nPtr<0) nPtr = n-1;//-1之后nPtr有可能是-1

           if(i==n-1) printf("%d\n",aLoop[nPtr]);
           aLoop[nPtr] = 0;//先輸出再置零
        }
    }
}

2.花生問題:輸入一個矩陣之后辽装,首先要找到最大花生的位置,其次計算到新的位置會否超時相味。注意要看是否在路邊拾积。

#include <stdio.h>
#include <stdlib.h>
int Field[55][55];

void main()
{
    int M,N,K;
    scanf("%d%d%d",&M,&N,&K);
    int m,n;
    for(m=1;m<=M;m++)
        for(n=1;n<=N;n++)
            scanf("%d",&Field[m][n]);
    
     int nPeanuts=0;
     int nTime=0;
     int nCuri=0,nCurj;

     int i,j;
     while(nTime<K)
     {
         int nMax=0,nMaxi,nMaxj;
         for(i=1;i<=M;i++)//找到最大的花生位置
            for(j=1;j<=N;j++)
                if(nMax<Field[i][j])
                {
                    nMax=Field[i][j];
                    nMaxi=i;
                    nMaxj=j;
                }
         
            if(nMax==0) break;
            if(nCuri==0) nCurj=nMaxj;//在路邊的話要移動

            nTime += 1+abs(nMaxi-nCuri)+abs(nMaxj-nCurj);
            if(nTime>K) break;
            nCuri=nMaxi;nCurj=nMaxj;
            nPeanuts += Field[nMaxi][nMaxj];
            Field[nMaxi][nMaxj]=0;
     }
     printf("%d\n",nPeanuts);
}

3.顯示器:主要就是把每個筆畫存到字符串里殉挽,然后根據(jù)字母和行數(shù)來進行輸出。

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

char n1[11]={"- -- -----"};
char n2[11]={"|   ||| ||"};
char n3[11]={"|||||  |||"};
char n4[11]={"  ----- --"};
char n5[11]={"| |   | | "};
char n6[11]={"|| |||||||"};
char n7[11]={"- -- -- --"};

void main()
{
    int s;
    char szNumber[20];
    int nDigit[8]={0},i,j,k,nLength;

    while(1)
    {
        scanf("%d%s",&s,szNumber);
        if(s==0) break;

        nLength=strlen(szNumber);
        for(i=0;i<nLength;i++)//檢查每個字符//輸出所有數(shù)字的筆畫1
        {
            nDigit[i]=szNumber[i]-'0';
        }   

        for(i=0;i<nLength;i++)
        {
            printf(" ");
            for(j=0;j<s;j++)//每個字符輸出s個筆畫
                printf("%c",n1[nDigit[i]]);
            printf(" ");
        }
        printf("\n");
        
        for(j=0;j<s;j++)
        {
            for(i=0;i<nLength;i++)
            {
              printf("%c",n2[nDigit[i]]);
              for(k=0;k<s;k++) printf(" ");
              printf("%c",n3[nDigit[i]]);
            }
        printf("\n");
        }

    //  printf("\n");
        for(i=0;i<nLength;i++)
        {
            printf(" ");
            for(j=0;j<s;j++)//每個字符輸出s個筆畫
                printf("%c",n4[nDigit[i]]);
            printf(" ");
        }

        printf("\n");
        for(j=0;j<s;j++)
        {
            for(i=0;i<nLength;i++)
            {
              printf("%c",n5[nDigit[i]]);
              for(k=0;k<s;k++) printf(" ");
              printf("%c",n6[nDigit[i]]);
            }
        printf("\n");
        }
        //printf("\n");
        for(i=0;i<nLength;i++)
        {
            printf(" ");
            for(j=0;j<s;j++)//每個字符輸出s個筆畫
                printf("%c",n7[nDigit[i]]);
            printf(" ");
        }
    }//while
}//main

4.排列問題:
(1)如何找當(dāng)前排列的下一個排列

以(2147653)為例子拓巧,首先找到aj滿足aj-1<aj斯碌,(4),其次在j-n里面找最小的比aj-1大的數(shù)肛度,并且讓這個數(shù)和aj-1互換位置傻唾,(2157643),最后把j-n升序排列(2153467)

(2)判斷一下當(dāng)前的排列是否已經(jīng)是降序承耿,如果是降序冠骄,那么直接輸出升序即可。
(3)qsort的用法:qsort(排列數(shù)組的起始地址加袋,排列個數(shù)凛辣,排列元素的內(nèi)存大小,比較函數(shù))

#include <stdio.h>
#include <stdlib.h>

#define MAX_NUM 1024
int an[MAX_NUM];

int MyCompare(const void *e1,const void *e2)
{
    return *((int*)e1)-*((int*)e2);
}


void main()
{
    int M;
    int n,k,i,j,tt;
    scanf("%d",&M);

    while(M--)
    {
        scanf("%d%d",&n,&k);//輸入
        for(i=1;i<=n;i++)
            scanf("%d",&an[i]);

        an[0]=100000;
        for(i=0;i<k;i++)//每次循環(huán)都找出下一個排列
        {
            for(j=n;j>=1&&an[j-1]>an[j];j--);
            if(j>=1)
            {
               //找到j(luò)到n中比當(dāng)前j-1大的最小的數(shù)
                int nMin=an[j];
                int nMinIdx = j;
                for(tt=j;tt<=n;tt++)
                  if(an[tt]>an[j-1] && an[tt]<nMin)
                  {
                      nMin = an[tt];
                      nMinIdx = tt;
                  }
                //交換位置
                an[nMinIdx]=an[j-1];
                an[j-1]=nMin;
                qsort(an+j,n-j+1,sizeof(int),MyCompare);//排序
            }
            else//已經(jīng)是降序了
            {
                for(j=1;j<=n;j++)
                    an[j]=j;         
            }
        }
        for(j=1;j<=n;j++)
            printf("%d ",an[j]);
        printf("\n");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末职烧,一起剝皮案震驚了整個濱河市扁誓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚀之,老刑警劉巖蝗敢,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異足删,居然都是意外死亡寿谴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門失受,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讶泰,“玉大人,你說我怎么就攤上這事贱纠【瘢” “怎么了响蕴?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵谆焊,是天一觀的道長。 經(jīng)常有香客問我浦夷,道長辖试,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任劈狐,我火速辦了婚禮罐孝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肥缔。我一直安慰自己莲兢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著改艇,像睡著了一般收班。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谒兄,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天摔桦,我揣著相機與錄音,去河邊找鬼承疲。 笑死邻耕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燕鸽。 我是一名探鬼主播兄世,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绵咱!你這毒婦竟也來了碘饼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤悲伶,失蹤者是張志新(化名)和其女友劉穎艾恼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麸锉,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡钠绍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了花沉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柳爽。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碱屁,靈堂內(nèi)的尸體忽然破棺而出磷脯,到底是詐尸還是另有隱情,我是刑警寧澤娩脾,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布赵誓,位于F島的核電站,受9級特大地震影響柿赊,放射性物質(zhì)發(fā)生泄漏俩功。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一碰声、第九天 我趴在偏房一處隱蔽的房頂上張望诡蜓。 院中可真熱鬧,春花似錦胰挑、人聲如沸蔓罚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豺谈。三九已至覆旱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間核无,已是汗流浹背扣唱。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留团南,地道東北人噪沙。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吐根,于是被迫代替她去往敵國和親正歼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容