給你一個原始字符串,根據該字符串內每一個字符出現的次數,按照ASCII碼遞增順序從新調整輸出。ui
舉例!假設原始字符串爲:
eeefgghhh
則每種字符出現的次數分別是:
(1).eee 3次
(2).f 1次
(3).gg 2次
(4).hhh 3次
重排輸出後的字符串以下:
efghegheh
編寫程序,實現上述功能。
【舒適提示】
(1).原始字符串中僅可能出現「數字」和「字母」;
(2).請注意區分字母大小寫。spa
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 1024
int main()
{
char str[MAXLINE+1] = {0};
int ind[62] = {0};
int i = 0, j = 0, len = 0;
while((i = getchar()) != EOF && i!='\n') {
str[len++] = i;
if(i>='0' && i<='9') {
ind[i-'0']++;
}
if(i>='A' && i<='Z') {
ind[i-'A'+10]++;
}
if(i>='a' && i<='z') {
ind[i-'a'+36]++;
}
}
for(i = 0; i<len; i++){
for(j = 0; j<62; j++) {
if(ind[j]>0) {
printf("%c", j>=36?j-36+'a':(j>=10? j-10+'A':j+'0'));
ind[j]--;
}
}
}
return 0;
}
給出一組正整數,你從第一個數向最後一個數方向跳躍,每次至少跳躍1格,每一個數的值表示你從這個位置能夠跳躍的最大長度。計算如何以最少的跳躍次數跳到最後一個數。code
輸入描述:
第一行表示有多少個數n
第二行開始依次是1到n個數,一個數一行
輸出描述:
輸出一行,表示最少跳躍的次數。字符串
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 1024
int ministep(int num[], int left, int right)
{
if(left == right-1) {
return 1;
}
int i = 0;
int step = right-left;
int index = right;
int tmp = 0;
for(i = right-1; i>=left; i--) {
if(num[i] >= right-i) {
tmp = ministep(num, left, i);
if(tmp+1 < step) {
step = tmp+1;
index = i;
}
}
}
return step;
}
int main()
{
int n = 0;
int i = 0;
int step = 0;
int *num = NULL;
//int tmp = 0;
scanf("%d", &n);
if(n==0) {
step = 0;
printf("%d\n", step);
return 0;
}
num = (int*)malloc(n*sizeof(int));
for(i = 0; i<n; i++) {
scanf("%d", num+i);
}
step = ministep(num, 0, n-1);
printf("%d\n", step);
return 0;
}
任意位數整數A和B相乘get
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define Int(X) (X - '0') /**************/
int *multi_big_integer(const char *, const char *);
int check_num(const char *);
int main(void)
{
char num1[100] = {'\0'}, num2[100] = {'\0'};
while(scanf("%s%s", num1, num2) != EOF)
{
int *result = NULL;
int i, change = 0;
if(strlen(num1) > 100 || strlen(num2) > 100)
{
return 1;
}
if(check_num(num1) || check_num(num2))
{
return 1;
}
result = multi_big_integer(num1, num2);
for(i = 1; i <= result[0]; i++)
{
if(result[i] != 0)
change = 1;
if(!change)
{
if(i > 1)
{
printf("0");
break;
}
continue;
}
printf("%d", result[i]);
}
printf("\n");
}
return 0;
}
int check_num(const char *num)
{
int i;
for(i = 0; (size_t)i < strlen(num); i++)
{
if(num[i] < '0' || num[i] > '9')
{
return 1;
}
}
return 0;
}
int *multi_big_integer(const char *num1, const char *num2)
{
int *result = NULL;
int num1Len = strlen(num1);
int num2Len = strlen(num2);
int resultLen;
int i, j;
resultLen = num1Len + num2Len;
result = (int *)malloc((resultLen+1)*sizeof(int));
memset(result, 0, (resultLen+1)*sizeof(int));
result[0] = resultLen;
for(j = 0; j < num2Len; j++)
{
for(i = 0; i < num1Len; i++)
{
result[i+j+2] += Int(num1[i]) * Int(num2[j]);
}
}
for(i = resultLen; i > 1; i--)
{
result[i-1] += result[i]/10;
result[i] = result[i]%10;
}
return result;
}