C語言——幾道習題

weixin_30576827發表於2015-06-02

//###43.圍圈報數

//n個人圍成一圈,順序排號。從第一個人開始報數(從1m報數),凡報到m的人退出圈子,問最後留下的是原來第幾號的哪位。(*****

 1 int main()
 2 {
 3     int n=0,m=0;
 4     scanf("%d %d",&n,&m);
 5     int a[100] = {};
 6     int i = 0;
 7     int cnt = 0;//統計數到第幾個人,迴圈m
 8     int count = 0;//迴圈跳出條件,當到n-1個人時跳出迴圈
 9     for(i=0;i<n;i++)
10     {
11         a[i] = 1;
12     }
13     i = 0;
14     while(a[i])
15     {
16         cnt++;
17         if(cnt==m)
18         {
19             a[i] = 0; //退出
20             cnt = 0; //重新開始報數
21             count++; //有count個人已經退出
22         }
23         i++;
24         if(i==n)
25         {
26 //          到了陣列的末尾,迴圈邊界,賦值從第一個開始遍歷
27             i = 0;
28         }
29         if(count > n-1)
30         {
31             break;
32         }
33     }
34     for(int j=0;j<n;j++)
35     {
36         if(a[j])
37         {
38             printf("%d %d",a[j],j);
39             break;
40         }
41     }
42     return 0;
43 }

//###7.計算某個由英文、數字以及標點符號構成的陣列的總寬度,其中英文字元的寬度為
//1cm,數字寬度為 0.5cm、標點符號寬度為 0.8cm

//8.接上題,如果規定行的寬度為 10cm,將某個字元長度超過 50 的字串截斷,恰好 使 10cm 寬的行能容納。輸出這個被截斷的子陣列。

 1 float getCharacterWeidth(char c)
 2 {
 3     if((c>='A' && c<='Z') || (c>='a' && c<='z'))
 4     {
 5         return 1.0;
 6     }else if(c>='0' && c<='9')
 7     {
 8         return 0.5;
 9     }else{
10         return 0.8;
11     }
12 }
13 int main()
14 {
15     char chs[100] = {};
16     int cnt = 0;
17     for(int i=0;i<100;i++)
18     {
19         scanf("%c",&chs[i]);
20         if(chs[i]=='\n')
21         {
22             chs[i] = '\0';
23             break;
24         }
25         cnt++;
26     }
27     float length = 0;
28     for(int i=0;i<cnt;i++)
29     {
30         length += getCharacterWeidth(chs[i]);
31         if(length>10)
32         {
33             chs[i] = '\0';
34             break;
35         }
36     }
37     printf("%s",chs);
38     return 0;
39 }

 

 

轉載於:https://www.cnblogs.com/BeyondAverage0908/p/4547500.html

相關文章