Рейтинг:
2
jatinp510
#include <stdio.h>
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
char arr[n];
int count=0;
scanf("%s",&arr);
for(i=0;i<strlen(arr);i++){
if(arr[i]=='0')
count++;
}
printf("%d\n",count);
}
return 0;
он работает для 1-го тестового случая .
и если я использую char[100000], то есть если я исправлю размер массива, он будет работать для всех тестовых случаев.
пожалуйста, проверьте вопросы в hackerearth.com раз.
Рейтинг:
1
OriginalGriff
Когда вы объявляете массив, вы должны сказать системе, сколько элементов (и какого типа) вам нужно - в противном случае она не может дать вам правильное число, и если она даст вам слишком мало, вы превысите выделенную память и запишете другие данные. Это либо вызовет ошибку в вашем приложении, либо приведет к его прекращению при попытке получить доступ к памяти, которой у него нет.
Это похоже на поход в кофейню: вы должны сказать им, какой размер напитка вы хотите, потому что если они дадут вам самый большой, который они могут, вы не захотите платить за него, и если они дадут вам чашку эспрессо, вы можете быть очень разочарованы.
Другое решение состоит в том, чтобы прочитать n и использовать malloc
чтобы выделить необходимое пространство - n * размер элемента в байтах. Не забудьте освободить память, когда вы закончите с ней!
jatinp510
в чем проблема с изменением размера массива в каждом тестовом случае?
и зачем использовать динамическую память, если у нас много памяти.
jatinp510
#включить <stdio.h>
тап_п()
{
инт т н я;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
char arr[100000];// что делать, если я напишу char arr[n]
int count=0;
scanf("%s",&arr);
for(i=0;i<strlen(arr);i++){
if(arr[i]=='0')
считать++;
}
printf("%d\n",count);
}
возвращает 0;
}
OriginalGriff
Вы не можете изменить размер массива в цикле: он фиксируется, как только вы его определяете.
Если вы хотите изменить размер, вам нужно использовать malloc.
jatinp510
сэр ... жду вашего ответа.
пожалуйста, обратитесь к выше код еще раз.
jatinp510
#include<bits/stdc++.h>
использование пространства имен std;
тап_п()
{
ios_base::sync_with_stdio(false);
Кин.галстук(нуль);
инт т н я;
cin>>t;
while(t--){
cin>>n;
int a[n],b[n];
для(i=0;i<n;i++){
cin>>a[i];
}
для(i=0;i<n;i++){
cin>>b[i];
}
сортировка(a,a+n);
сортировка(b,b+n);
если(a[n-1]==b[n-1])
cout<<"галстук\n";
иначе если(a[n-1]>b[n-1])
cout<<"Bob\n";
еще
cout<<"Алиса\n";
}
возвращает 0;
}
https://www.hackerearth.com/practice/basic-programming/implementation/basics-of-implementation/practice-problems/algorithm/warcakewalk/
jatinp510
здесь я изменяю размер массива в каждом тестовом случае
Рейтинг:
1
CPallini
Цитата:
scanf("%d",&n);
char arr[n];
int count=0;
scanf("%s",arr);
C99
позволяет динамическое выделение памяти в стеке, следовательно
char arr[n];
это действительное утверждение.
Однако ваш код несовершенен, потому что
scanf("%s",arr);
мог бы обогнать
arr
буфер (например, предположим, что пользователь устанавливает
n=5
а потом входит в строку
"foobar"
).
jatinp510
plzzz... обратитесь к вопросу в hackerearth.com -да ...
пользователь может использовать только 5 символов ввода, если n=5.
он не может использовать 6 символов.
а если мой код неверен для arr[n];
затем,
почему он работает для 1 тестового случая ques.