此文收集几道稍微有点算法的题目。
一、给两个整数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 }
浙公网安备 33010602011771号