1、
[编程题]字符串中找出连续最长的数字串
2、
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
输入例子:
abcd12345ed125ss123456789
输出例子:
123456789
#if 0 ///法1,并输出
///计算输入的字符串中最大的数字串
int main()
{
int i = 0;
int num = 0;
int k = 0;
int j = 0;
int Max=0;
int Max_l=0;
char str[]="abcd12345ed125ss123456789";
//char str[255];
//scanf("%s", str);
int a[10] = {0};
int b[10] = {0};
int c[10] = {0};
///首先统计字符串中的数字串的个数
for(i=0;str[i]!='\0';){
num=atoi(str+i);
if(num>0){
printf("num=%d\n",atoi(str+i));
c[k]=num;
while(num>0)
{
a[j]= num%10;
num = num/10;
j++;
}
printf("一共有%d位\n",j);
i +=j;
b[k]=j;
k++;
j=0;
}else{
i++;
}
}
for(i=0;i<k;i++){
printf("%d\n",b[i]);
///找出数组中最大的整数
if(b[i]>Max){
Max=b[i];
Max_l=i;
}
}
printf("(%d,%d,%d)\n",b[Max_l],Max_l,c[Max_l]);
return 0;
}
#endif // 0
#if 0 ///法2
int main()
{
int i=0, j;
int num1=0, num2=0;
int index1=0, index2=0;
char str[255];
char flag=0;
scanf("%s", str);
while(str[i] != '\0')
{
num2=0;
while(str[i]>='0' && str[i]<='9')
{
num2++;
index2 = i;
i++;
}
if(num2>num1)
{
num1 = num2;
index1 = index2;
}
i++;
}
for(j=index1-num1+1; j<=index1; j++)
cout << str[j];
cout << endl;
return 0;
}
#endif // 0
2、
[编程题]n个数里最小的k个
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n
不超过100。
输出描述:
输出n个整数里最小的k个数。升序输出
输入例子:
3 9 6 8 -10 7 -11 19 30 12 23 5
输出例子:
-11 -10 3 6 7
///n个整数中最小的k个整数
#if 0
int main()
{
int a[100] = {0};
int num=0;
int k=3;
int i=0;
vector<int> b;
while (scanf("%d",&a[num]) != EOF && getchar() != '\n')//录入带空格的数字流。
{
num++;
}
int n = num+1;
for(i=0;i<n;i++)
b.push_back(a[i]);
sort(b.begin(),b.end());
printf("b= ");
for(i=0;i<b.size();i++){
printf("%d ",b[i]);
}
printf("\n");
for(int i=0; i<k; i++)
{
cout << b[i] << ' ';
}
cout<<endl;
return 0;
}
#endif
3、
[编程题]n个数里出现次数大于等于n/2的数
输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
输入例子:
3 9 3 2 5 6 7 3 2 3 3 3
输出例子:
3
///输出出现次数大于等于n/2的数
#if 0
int main()
{
char str[202];
int a[101];//存储数字,这里可以进行动态开辟数组
gets(str);
int len = strlen(str);
int i,j=0;
for(i=len-1;i>=0;) {
int sum=0;
int ling = -1;//判断个、十、百...位
int flag = 0;
while(str[i]!=' ' && i>=0){
if(str[i]!='-') {
ling++;
sum+=(str[i]-48)*pow(10,ling);
}
else{
flag = 1;
}
i--;
}
if(flag)
a[j] = sum*(-1);
else
a[j] = sum;
j++;
i--;
}
for(i=0;i<j;i++)
{
int account= 1;
int number;
for(int k=i+1;k<j;k++)
{
if(a[i]==a[k])
{
account++;
number = a[k];
}
}
if(account>=j/2){
cout<<number;
break;
}
}
return 0;
}
#endif