c语言入门100例六十一到六十五题

#循环输入。每次输入为一个正整数 a(a≤10^9),现在需要对这个正整数进行逆序输出。当没有任何输入时,程序结束。

#include <stdio.h>
int a[1010],front,near;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
front=near=0;
while(n){
a[front++]=n%10;
n=n/10;
}
while(near<=front){
printf("%d",a[near++]);
}
printf("\n");
}
return 0;

#循环输入。每组数据输入一个 n,然后是 n 个数,求输出经过计数排序后的结果。当没有任何输入时,程序结束。

#include <stdio.h>
#include <string.h>

#define maxn 1000001;
#define maxk 100001;

int a[maxn];
int cnt[maxk];

void input(int n,int *a){
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
}

void output(int n,int *a){
int i;
for(i=0;i<n;i++){
printf("%d",a[i]);
}
puts("");
}

void countingsort(int n,int *a[]){
int i,top;
memset(cnt,0,sizeof(cnt));
for(i=0;i<n,i++){
cnt(a[i])++;//把a[i]的值存储在cnt数组下标中,因为数组下标本身就是有序的,所以接下来一步直接输出就好了
}
top=0;
for(i=0;i<maxk;i++){//对cnt数组进行便利
while(cnt[i]){
//相当于cnt数组下标是数字,cnt数组存储的是数字出现的次数,那么对于数组进行while循环判断,将下标输出,计数有几次输出几次,同时满足计数数字归0的时候,表示数字输出结束
a[top++]=i;
cnt[i]--;
}
if(top==n){
break;//因为for循环是便利i到maxk的,所以需要设置一个界限,降低时间复杂度
}
}
}


int main() {
    int n;
    while(scanf("%d", &n) != EOF) {
        Input(n, a);
        CountingSort(n, a);
        Output(n, a);
    }
    return 0;
} 

#循环输入。每组数据输入一个 n(5×10^5),然后是 n 个数,请找出其中没有出现的最小的正整数。

#include <stdio.h>
int hash[500001],cases=0;//cases用来记录这个数字是否出现在hash数组中,是为1,不是为0

int firstmissingpositive(int *nums,int numsize){
int i;
cases=0;
for(i=0;i<numsize;i++){
if(nums[i]>=0&&nums[i]<=500001){
hash[nums[i]]=cases;
}
}
for(i=1;i<=500001;i++){
if(hash[i]<cases){
return i;
}
}
return numsize+1;
}
int n,a[nums];
int main(){
int i,ans;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
ans=firstmissingpositive(a,n);
printf("%d",ans);
}
return 0;
}

#循环输入。每组数据输入一个字符串,要求找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 −1。当没有任何输入时,程序结束。

#include <stdio.h>
#include <string.h>

int firstuniquechar(char *s){
int hash[256],i;
memset(hash,0,sizeof(hash));

while(s[i]){
++hash[s[i++]];
}
i=0;
while(s[i]){
if(hash[s[i]]==1)
return i;
i++;
}
return -1;
}
char s[1000000];

int main() {
while(scanf("%s", s) != EOF) {
printf("%d\n", firstUniqChar(s));
} 
return 0;

#循环输入。每组数据输入一个字符串,要求找到它的第一个出现两次的字符,并返回它的索引。如果不存在,则返回−1。当没有任何输入时,程序结束。

#include <stdio.h>
#include <string.h>
 
int firstUniqChar(char * s){
int i = 0, hash[256];
memset(hash, 0, sizeof(hash));  
while(s[i]) {
++hash[ (int)s[i++] ];             
}
i = 0;
while(s[i]) {
if(hash[ (int)s[i] ] == 2) {       
return i;
}
++i;
}
   
return -1;                             
}

char s[1000000];

int main() {
    while(scanf("%s", s) != EOF) {
        printf("%d\n", firstUniqChar(s));
    } 
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值