编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
#include <iostream>#include <string.h>using namespace std;intmain(){charc[500000];ints[130]={0};cin>>c;intlen = strlen(c);intcount =0;for(inti =0; i <len; ++i ){if(c[i]>=0&& c[i]<=127)s[c[i]]++;}for(inti =0; i <130; ++i){if(s[i] >0)count++;}cout<<count<<endl;return0;}句子逆序
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符#include <iostream> #include <stack> #include <string> using namespace std; //句子逆序 以空格为单位 //题目要求是 i am a boy boy a am i //对于逆序的用栈最合适 int main(int argc, char* argv[]) { string s; stack<string> sstack; while(cin>>s) { sstack.push(s); } while(sstack.size()!=1) { cout<<sstack.top()<<" "; sstack.pop(); } cout<<sstack.top()<<endl; return 0; }
字串的连接最长路径查找
题目描述
给定n个字符串,请对n个字符串按照字典序排列。输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。#include<iostream>#include<cstring>using namespace std;intmain(){chara[1000][1000];chartemp[1000];intn;cin>>n;for(inti=0;i<n;i++){cin>>a[i];}for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(strcmp(a[i],a[j])>0){strcpy(temp,a[i]);strcpy(a[i],a[j]);strcpy(a[j],temp);}}}for(inti=0;i<n;i++){cout<<a[i]<<endl;}}求int型正整数在内存中存储时1的个数
题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
#include<iostream>using namespace std;intmain(){intn;cin>>n;inta[100000]={0};inti=0,num=0;while(n){a[i]=n%2;n/=2;i++;}for(intj=0;j<i;j++){if(a[j]==1)num++;}cout<<num<<endl;return0;}购物单
输入的第 1 行,为两个正整数,用一个空格隔开:N m
(其中 N ( <32000 )表示总钱数, m ( <60 )为希望购买物品的个数。)
从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q
(其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1 ~ 5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号)#include <iostream>#include <memory.h>using namespace std;#define max(a,b) a>b?a:bintmain(){intN;intm;cin>>N>>m;intw[100][3];intv[100][3];inttotal[100][5000];memset(w,0, sizeof(w));memset(v,0, sizeof(v));memset(total,0, sizeof(total));int_v,_p,_q;intnum =1;//num为主件的总数for(inti=1;i<=m;i++){cin>>_v>>_p>>_q;if(_q ==0){w[num][0] = _p*_v;v[num][0] = _v/10;num++;}else{if(w[_q][1]==0){w[_q][1] = _v*_p;v[_q][1] = _v/10;}else{w[_q][2] = _p*_v;v[_q][2] = _v/10;}}}num-- ;for(inti=1;i<=num;i++){for(intj=v[i][0];j<=N/10;j++){//比较不添加i组物品和添加i组主件inttmp = max(total[i-1][j], (total[i-1][ j-v[i][0] ]+w[i][0]));//比较有附件1if(v[i][1]>0&&j-v[i][0]-v[i][1]>=0){tmp = max(tmp, (total[i-1][ j-v[i][0]-v[i][1] ]+v[i][0]+w[i][1]));}//比较有附件2if(v[i][2]>0&&j-v[i][0]-v[i][2]>=0){tmp = max(tmp, (total[i-1][ j-v[i][0]-v[i][2] ]+w[i][0]+w[i][2]));}//比较有附件1和附件2if(v[i][2]>0&&v[i][1]>0&&j-v[i][0]-v[i][1]-v[i][2]>=0){tmp = max(tmp, (total[i-1][ j-v[i][0]-v[i][1]-v[i][2] ]+w[i][0]+w[i][1]+w[i][2]));}total[i][j] = tmp;}}cout << total[num][N/10] << endl;}坐标移动
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
A10;S20;W10;D30;X;A1A;B10A11;;A10;#include<iostream>#include<string.h>using namespace std;intIsright(charstr[]){intcount =0;if(strlen(str)>0&&strlen(str)<=3)count++;if(str[0]=='A'||str[0]=='S'||str[0]=='D'||str[0]=='W')count++;if((isdigit(str[1])&&(strlen(str)==2))||((strlen(str)>2) && isdigit(str[2]) && isdigit(str[1])))count++;if(count ==3)return1;elsereturn0;}intmain(){charstr[10001];charsolve[1001][1001];while(gets(str)){intlen = strlen(str);intcount =0;intnum =0;for(inti =0;i<len;i++){if(str[i]==';'){solve[count][num] ='\0';count++;num =0;//cout<<";;"<<count<<endl;}else{//cout<<"zz"<<count<<endl;solve[count][num++] = str[i];}//solve[count][num] = '\0';//cout<<solve[i]<<endl;}intleft =0;intright =0;for(inti =0;i<count;i++){//cout<<solve[i]<<endl;intnum_temp =0;if(Isright(solve[i])){//cout<<"s"<<solve[i]<<endl;switch(solve[i][0]){case'A':{if(strlen(solve[i])==2){num_temp = solve[i][1] -'0';}else{num_temp = (solve[i][1] -'0')*10+ solve[i][2] -'0';}//cout<<num_temp<<endl;left-=num_temp;break;}case'D':{if(strlen(solve[i])==2){num_temp = solve[i][1] -'0';}else{num_temp = (solve[i][1] -'0')*10+ solve[i][2] -'0';}//cout<<num_temp<<endl;left+=num_temp;break;}case'W':{if(strlen(solve[i])==2){num_temp = solve[i][1] -'0';}else{num_temp = (solve[i][1] -'0')*10+ solve[i][2] -'0';}//cout<<num_temp<<endl;right+=num_temp;break;}case'S':{if(strlen(solve[i])==2){num_temp = solve[i][1] -'0';}else{num_temp = (solve[i][1] -'0')*10+ solve[i][2] -'0';}//cout<<num_temp<<endl;right-=num_temp;break;}default:break;}}}cout<<left<<","<<right<<endl;}}识别有效的IP地址和掩码并进行分类统计
输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。
输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
输入例子:
10.70.44.68~255.254.255.0 1.0.0.1~255.0.0.0 192.168.0.2~255.255.255.0 19..0.~255.255.255.0简单错误记录
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;bool valid(char* data){if(data == NULL)returnfalse;intlen = strlen(data);if(len ==0)returnfalse;for(inti =0; i < len; i++){if(!(data[i] <='9'&& data[i] >='0')){returnfalse;}}returntrue;}bool checkAndConvert(char*ip, unsignedint&result){intdot =0;for(inti =0; i < strlen(ip); i++){if(ip[i] =='.')dot++;}if(dot !=3)returnfalse;char*data = strtok(ip,".");if(!valid(data))returnfalse;inttmp =0;result =0;intcount =0;while(data){tmp = atoi(data);if(tmp >255)returnfalse;result = result *256+ tmp ;count ++;data = strtok(NULL,".");}if(count !=4)returnfalse;returntrue;}intmain(){charinput[100];charip[50];charmask[50];intans[10];memset(ans,0,sizeof(ans));while(gets(input)){intidx1 =0;intidx2 =0;intflag =0;for(inti =0; i < strlen(input); i++){if(input[i] =='~'){ip[idx1] ='\0';flag =1;}elseif(flag ==0)ip[idx1++] = input[i];elseif(flag ==1)mask[idx2++] = input[i];}mask[idx2] ='\0';unsignedintipnum =0;unsignedintmasknum =0;if(!checkAndConvert(ip,ipnum) || !checkAndConvert(mask,masknum)){ans[5]++;continue;}if(((~masknum +1) | masknum) != masknum || masknum ==0|| ~masknum ==0){ans[5] ++;continue;}inthead = ipnum >>24;intnext = (ipnum - (head <<24)) >>16;if(head <=126&& head >0){ans[0]++;}elseif(head <=191&& head >=128){ans[1]++;}elseif(head <=223&& head >=192){ans[2]++;}elseif(head <=239&& head >=224){ans[3]++;}elseif(head <=255&& head >=240){ans[4]++;}if(head ==10){ans[6]++;}if(head ==172&& next >=16&& next <=31){ans[6]++;}if(head ==192&& next ==168){ans[6]++;}}cout<<ans[0];for(inti=1;i<7;i++)cout<<" "<<ans[i];}题目描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
E:\V1R2\product\fpgadrive.c 1325#include <stdlib.h>#include <stdio.h>#include <string.h>typedef struct{charname[17];intline;intnum;}Errorinfo;intmain(){charbuffer[10240];intcount =0, hang,i;Errorinfo record[10240];while(scanf("%s %d", buffer, &hang) ==2){char*p = strrchr(buffer,'\\');intlen = strlen(p+1);if(len >16)p = p + len -16;for(i =0; i < count; ++i){if(strcmp(record[i].name, p+1) ==0)if(record[i].line == hang){++record[i].num;break;}}if(i == count){strcpy(record[count].name, p+1);record[count].line = hang;record[count].num =1;++count;}}if(count <8)i =0;elsei = count -8;for(; i < count; ++i)printf("%s %d %d\n",record[i].name, record[i].line, record[i].num);return0;密码验证合格程序}输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
#include <stdio.h>#include <string.h>intmain(){charstr[1000][1000];inti,j;intn=0;while(gets(str[n])!=NULL)++n;for(i=0;i<n;i++){inta=0,b=0,c=0,d=0;for(j=0;str[i][j]!='\0';j++){if(str[i][j]>='0'&&str[i][j]<='9')a=1;elseif(str[i][j]>='a'&&str[i][j]<='z')b=1;elseif(str[i][j]>='A'&&str[i][j]<='Z')c=1;elsed=1;}if(a+b+c+d<3||j<=8)printf("NG\n");else{for(j=0;j<=strlen(str[i])-3;j++){chartemp[100];char*p1;strncpy(temp,&str[i][j],3);temp[3]='\0';//每次取3个字符组成字串p1=strstr(str[i],temp);if(p1!=NULL&&p1!=&str[i][j]){printf("NG\n");break;}}if(j>strlen(str[i])-3)printf("OK\n");}}return0;}汽水瓶
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
输入例子:
3 10 81 0数据分类处理#include<stdio.h>intmain (){intm;while(~scanf("%d",&m)&&m!=0) printf("%d\n",m/2);return0;}30----后续有30个整数
3----从小到大排序,第一个R<i>为0,但没有满足条件的I<j>,不输出0,而下一个R<i>是3
6--- 存在6个包含3的I<j>
0--- 123所在的原序号为0
123--- 123包含3,满足条件
输入例子:
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123 5 6 3 6 3 0输出例子:
30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786【中级】单词倒排
# include <stdio.h># include <string.h>voidSort(intR[] ,intn){inti;intj;inttemp;for(i=0; i<n ; i++){for(j=i+1; j<n ; j++){if(R[i] > R[j]){temp = R[i];R[i] = R[j];R[j] = temp;}}}}bool Fun(inta ,intb){intc1 =0;charc[100];chard[100];inti =0;intj =0;if(a>=10){while(a){c[i] = a%10+'0';a /=10;i++;}while(b){d[j] = b%10+'0';b /=10;j++;}c[i] ='\0';d[j] ='\0';if(strstr(d,c))returntrue;elsereturnfalse;}else{while(b){c1 = b%10;if(c1 == a)returntrue;b /=10;}returnfalse;}}intmain(void){inti , j , k;intt;inta;intcnt;//计数intm;//序列I的个数intn;//序列R的个数intI[65535];intR[65535];intP[65535];intQ[1000];while(scanf("%d",&m) != EOF ){a =0;for(i=0; i<m ; i++){scanf("%d",&I[i]);}scanf("%d",&n);for(j=0; j<n ; j++){scanf("%d",&R[j]);}Sort(R,n);for(i=0; i<n ; i++){cnt =0;k =0;while(R[i] == R[i+1] && i<n-1)i++;for(j=0; j<m ; j++){if(Fun(R[i] , I[j])){Q[k++] = j;Q[k++] = I[j];cnt++;}}if(cnt >0){P[a] = R[i];P[a+1] = cnt;for(t=1; t<=2*cnt ; t++){P[a+1+t] = Q[t-1];}a = a +2*cnt +2;}}printf("%d ",a);for(i=0; i<a ; i++){printf("%d",P[i]);if(i == a-1)printf("\n");elseprintf(" ");}}return0;}
1210

被折叠的 条评论
为什么被折叠?



