C-код для расчета всех сумм и хранения сумм с индексами внутри массива структур. Затем мы сортируем структуры и печатаем смежные элементы структуры с одинаковой суммой.
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <errno.h>
#include <assert.h>
// for debugging
#define debug(...) ((void)0) // printf(__VA_ARGS__)
// two indexes and a sum
struct is_s {
// one index inside the array
size_t i;
// the other index also inside the array
size_t j;
// no idea, must be random
int sum;
};
// used for qsoring the struct is_s
static int is_qsort_compare_sum(const void *a0, const void *b0) {
const struct is_s * const a = a0;
const struct is_s * const b = b0;
return a->sum - b->sum;
}
int unique_pairs(const size_t len, const int arr[len]) {
if (len <= 1) return 0;
// The number of unsorted combinations must be n!/(2!*(n-2)!)
const size_t islen = len * (len - 1) / 2; // @MOehm
debug("%zu\n", islen);
struct is_s * const is = malloc(islen * sizeof(*is));
if (is == NULL) {
return -ENOMEM;
}
size_t isidx = 0;
for (size_t i = 0; i < len; ++i) {
for (size_t j = i + 1; j < len; ++j) {
assert(isidx < islen); // just for safety
struct is_s * const p = &is[isidx++];
p->i = i;
p->j = j;
p->sum = arr[i] + arr[j];
debug("[%zu]=[%zu]=%d [%zu]=%d %d\n", isidx, p->i, arr[p->i], p->j, arr[p->j], p->sum);
}
}
qsort(is, islen, sizeof(*is), is_qsort_compare_sum);
for (size_t i = 0; i < islen - 1; ++i) {
debug("([%zu]=%d,[%zu]=%d)%d = ([%zu]=%d,[%zu]=%d)%d\n",
is[i].i, arr[is[i].i], is[i].j, arr[is[i].j], is[i].sum,
is[i+1].i, arr[is[i+1].i], is[i+1].j, arr[is[i+1].j], is[i+1].sum
);
if (is[i].sum == is[i + 1].sum) {
printf("(%d,%d),(%d,%d) = %d\n",
arr[is[i].i], arr[is[i].j],
arr[is[i+1].i], arr[is[i+1].j], is[i].sum);
}
}
free(is);
return 0;
}
int main(void) {
const int arr[] = {6,4,12,10,22,54,32,42,21,11};
return unique_pairs(sizeof(arr)/sizeof(*arr), arr);
}
Результат, который я получаю:
(6,10),(4,12) = 16
(10,22),(21,11) = 32
(12,21),(22,11) = 33
(22,21),(32,11) = 43
(32,21),(42,11) = 53
(12,42),(22,32) = 54
(10,54),(22,42) = 64
Поскольку я задаюсь вопросом, правильно ли это, как заметил @Bathsheba, я думаю, что худший случай - O (n * n).
Так, на iphone, когда вы говорите «развернуть», я думаю, вы имеете в виду, когда пользователь подправляет строку списка, и он перемещает новый вид справа, в большинстве случаев он имеет навигационную панель сверху дать пользователю возможность вернуться назад?
То, как android справляется с этим, просто запускает новое действие. Таким образом, при щелчке по listItem у вас будет ListActivity для «Книг», вы будете определять новое намерение, которое будет запускать ListActivity «Глав» и так далее. Навигационная панель в верхней части iphone не является стандартным пользовательским интерфейсом в Android, так как большинство людей видит выделенную клавишу «назад» как способ вернуться на экран предварительного просмотра.
Вот как вы начинаете намерение, если вы его еще не видели:
Intent chaptersIntent = new Intent(this, Chapters.class);
this.startActivity(chaptersIntent);
Эта статья заслуживает быстрого прочтения, так как в ней прекрасно объясняются действия
http://d.android.com/guide/topics/fundamentals.html
Также взгляните на версию TableView для Android - ListView:
http://d.android.com/reference/android/widget/ListView.html
и ListActivity:
http://d.android. com / reference / android / app / ListActivity.html
РЕДАКТИРОВАТЬ :: Пример кода Я хотел бы сделать что-то вроде этого
public class Books extends ListActivity {
private String[] mBooks = new String[]{ "Book1", "Book2", "Book3", "Book4" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> booksAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
android.R.id.text1,
mBooks);
this.setListAdapter(booksAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent mViewChaptersIntent = new Intent(this, Chapters.class);
mViewChaptersIntent.putExtra("BookName", mBooks[position]);
startActivity(mViewChaptersIntent);
}
}
Таким образом, вы проходите через идентификатор книги в качестве дополнения к Намерению, то в разделе «Действия в главах» вы получаете это дополнение в методе onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null) {
String bookId = extras.getString("BookName");
}
}
Наконец, убедитесь, что все новые действия добавлены в ваш файл AndroidManifest.xml:
<activity android:name=".YourClassName"
android:label="@string/activity_name"
>
</activity>
Надеюсь, что помогает
Как уже указывалось XML-способ создания макетов является наиболее предпочтительным.
В основном, кто-то касается ячейки в таблице, которая сверлит до другой таблицы. когда они касаются ячейки на этой таблице, она превращается в веб-просмотр, который отображает информацию.
Из того, что я понял из термина «детализация», это может быть следствием того, что вам нужно
http://developer.android.com/guide/topics/ui/ui-events .html
Из официальных документов
Прослушиватель событий - это интерфейс в классе View, содержащий единственный метод обратного вызова. Эти методы будут вызываться платформой Android, когда представление, для которого зарегистрирован прослушиватель, запускается при взаимодействии пользователя с элементом в пользовательском интерфейсе.
Основной способ создания пользовательского интерфейса Android - использование xml. Я не совсем уверен, что вы имеете в виду, когда говорите «развернуть», но если вы хотите, чтобы он изменил представления, это так же просто, как сделать один набор элементов xml видимым, а другой - нет. Посетите страницы для разработчиков для получения дополнительной помощи.
http://developer.android.com/guide/topics/ui/index.html
Забыл упомянуть, что это тоже очень хороший ресурс для начинающих. http://mobiforge.com/designing/story/understanding-user-interface-android-part-1-layouts