夏日星

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

此文收集几道稍微有点算法的题目。

一、给两个整数M,N,计算出两数相除的小数部分:1、若为有限小数,则输出全部;2、若为无限循环小数,则只需输出循环体即可。

  例:输入,1,3,则输出 3(字符串),

        1,7,则输出 142857(字符串)。

  思路:具体思路就是简单的竖式“厂”字除法(小学三年级学的),小数部分就是将余数除以被除数得到的整数部分,然后再将刚才计算的余数乘以10,如此循环运算,直到得到的余数为0或者某次得到的整数部分与之前得到的小数部分的第一位相同。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 10
 4 
 5 int main()
 6 {
 7     int j,i=0,flag=0;
 8     int m,n;
 9     char temp,num[N]={0};
10     scanf("%d",&m);
11     scanf("%d",&n);
12     m = m%n;                         //因为只需要输出小数部分,所以若m〉n,将m赋值为 m % n;
13     while(m)
14     {
15         temp = (m*10)/n + '0';    //(m*10)/n 是小数部分的一位,每次产生一位;
16         j=0;
17         if(num[0] && num[0] == temp)//查看是否跟第一个小数部分相等;
18             break;          //相等就跳出循环;
19         num[i++] = temp;       //不相等的话,将字符赋值给num数组
20         m = m * 10 % n;        //m 乘以10然后再与 n 取余,以便下次运算,若为0则结束;
21     }
22     printf("%s",num);
23 }

二、给你一句话(英文的),也就是一个字符串,包括英文字母,标点符号,空格。要你输出这个字符串去掉标点、重复单词后的结果。

  例如:

    输入:you get the technology,you get the powter.

    输出:you get the technology powter

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 100
 4 
 5 int isAlpher(char a)
 6 {
 7     if((a>='a' && a<='z') || (a>='A' && a<='Z'))
 8         return 1;
 9     return 0;
10 }
11 
12 void filter(char *str, int len)
13 {
14     int i=0,j,begin=0,end=0;
15     int tempLen;
16     char *temp,*result[N] = {0}; //定义一个字符指针数组,数组里每个元素存的是 char *;
17     i=0;
18     while(str[i])         //扫描句子;
19     {
20         while(!isAlpher(str[i]) && i < len)
21             ++i;
22         if(i >= len)      //扫到最后没找到字母,就直接结束;
23             break;
24         begin = i;
25         while(isAlpher(str[i]))
26             ++i;
27         end = i-1;
28         tempLen = end-begin+1;   //单词长度;
29         temp = (char *)calloc(1,sizeof(char)*tempLen+1);  //申请临时空间装单词;
30         strncpy(temp, str+begin, tempLen);
31         j=0;
32         while(result[j])      //查看有没有重复单词;
33         {
34             if(!strcmp(result[j], temp)) break;
35             j++;
36         }
37         if(!result[j])      //没有找到就是新单词,新申请空间装单词;
38         {
39             result[j] = (char *)calloc(1,sizeof(char)*tempLen+1);
40             strcpy(result[j], temp);
41         }
42     }
43     j=0;
44     while(result[j])
45     {
46         printf("%s ",result[j++]);
47     }
48 }
49 
50 int main()
51 {
52     char str[N];
53     gets(str);
54     int len = strlen(str);
55     filter(str, len);
56     getchar();
57     return 0;
58 }

 

posted on 2014-05-06 20:12  夏日星  阅读(127)  评论(0)    收藏  举报