编程练习收获

来源:互联网 发布:java unicode编码表 编辑:程序博客网 时间:2024/05/19 09:09
1.输入一个字符串,判断其是否是C的合法标识符。
 
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
 
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
#include<stdio.h>int main(){int n,i,lag;char a[50];scanf("%d",&n);getchar();while(n--){lag=0;gets(a);//为什么用scanf输入字符串时,遇到空格就结束,后面的字符不算 if((a[0]>='a' && a[0]<='z')||(a[0]>='A' && a[0]<='Z')|| a[0]=='_'){for(i=1;a[i]!='\0';i++)、、此语句也可用strlen 求长度后用for循环n来写{if((a[i]>='a' && a[i]<='z')||(a[i]>='A' && a[i]<='Z')|| a[i]=='_' || (a[i]>='0' && a[i]<='9'))  lag=1;else{lag=2;break;}}if(lag==1)  printf("yes\n");else  printf("no\n");}else{  printf("no\n");} }return 0;}
2.
# include <stdio.h># include <string.h>int main (void){char str[100];while (~scanf("%s",str)){int length,i;char max = 'A';//此题是按ASCII码排序;所以A算是最小元素 length = strlen(str);for (i=0;i<length;i++)//找出ASCII码最大的元素 if (str[i]>=max)max = str[i];for (i=0;i<length;i++)//循环输出每个元素,如果是最大元素就在后面加(max) if (str[i]!=max)putchar(str[i]);elseprintf("%c(max)",max);printf("\n");}return 0;}
2.在找到的最大字母后面加一个字符串方法  输出时直接用输出语句打出即可   %c(max)  而非后面的max
     for (i=0;i<length;i++)//循环输出每个元素,如果是最大元素就在后面加(max) 
if (str[i]!=max)putchar(str[i]);elseprintf("%c(max)",max);
3 
输入一个英文句子,将每个单词的第一个字母改成大写字母。
 
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
 
Output
请输出按照要求改写后的英文句子。
#include<stdio.h>#include<string.h>int main(){int len,i;char str[100];while(gets(str)){len=strlen(str);for(i=0;i<len;i++){if(i==0) str[0]=str[0]-32;if(str[i]==' '){str[i+1]=str[i+1]-32;}printf("%c",str[i]);}printf("\n");}}
while(gets(str)) 这句使用的好
5.判断回文串中其中优秀序数处理语句
  f=1;
for(j=0;j<l/2;j++){
if(str[j]!=str[l-j-1]){f=0;
不用分奇数偶数,直接一步到位
6.判断字符串中汉字的个数
ASCII码的范围是0-127所以,超出范围的都是汉字,因为一个汉字占两个字符位置,所以结果除以2就可以了
#include<stdio.h>#include<string.h>int main(){char a[100001];int n;int i;int s;scanf("%d",&n);getchar();while(n--){       gets(a);   s=0;   for(i=0;i<strlen(a);i++)   {   if(a[i]<0||a[i]>127) s++;   }   printf("%d\n",s/2);}return 0;}
7.十进制转换为其他进制  实质上各个位是余数,
#include<stdio.h>#include<math.h>int main(){int n,m,b,i,j;char a[100];while(scanf("%d%d",&n,&m)!=EOF){j=0;if(n<0){n=-n;printf("-");    }while(n){    b=n%m;if(b<10)a[j]=(char)(b+'0');if(b>=10)a[j]=(char)('A'+b-10);        n=n/m;        j++;}while(j--)printf("%c",a[j]);printf("\n");}return 0;}

8.利用叉乘1/2*a*bsin求多边形面积,n个点所围成的多边形
#include<stdio.h>int main(void){int n;int a[100],b[100],i,j,k;double s;while(scanf("%d",&n)!=EOF&&n){s=0;i=0;//k=n;for(i=0;i<n;i++)scanf("%d%d",&a[i],&b[i]);a[n]=a[0];b[n]=b[0];for(i=0;i<n;i++)s+=(a[i]*b[i+1]-a[i+1]*b[i]);printf("%.1lf\n",s/2);}return 0;}
9.贪心  
贪心思想:节目时间越早结束,能看的节目数量就越多
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
 
Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
121 33 40 73 815 1915 2010 158 186 125 104 142 90
 

Sample Output
5
#include<stdio.h>int main(){int n,size[100][2],i,j,ex1,ex2,count,began;while(scanf("%d",&n)!=EOF&&n){for(i=0;i<n;i++)for(j=0;j<2;j++)scanf("%d",&size[i][j]);//交换排序时间的数据for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(size[i][1]>size[j][1]){ex1=size[i][0];ex2=size[i][1];size[i][0]=size[j][0];size[i][1]=size[j][1];size[j][0]=ex1;size[j][1]=ex2;}//找开始时间,如果开始时间越小,证明节目的时长越小,就能看到更多的节目for(count=0,i=0,began=0;i<n;i++)if(size[i][0]>=began){began=size[i][1];count++;}printf("%d\n",count);}return 0;}

10.真约数:除了自身外的所有正约数  已查验!
220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 
11
   4位数10进制数字化16进制,12进制方法.
int h[4],b,sum,a;a=sum=0;while(i!=0){h[a++]=i%j;i/=j;sum+=h[a-1];}

  
    
原创粉丝点击